1. 程式人生 > >Python爬蟲-萌妹子圖片

Python爬蟲-萌妹子圖片

存在 創建目錄 無效 images width ebr file logs read

技術分享

最近發現一個可以看圖的地方,一張張翻有點累,畢竟只有一只手(難道鼠標還能兩只手翻?)。能不能下到電腦上看呢,畢竟不用等網速,還可以預覽多張,總之很方便,想怎麽就怎麽,是吧?

剛好這幾天在學python,剛好拿來試試手。

代碼註釋很詳細就不做解釋了。代碼比較醜,有建議隨便提,反正我也不改。

import requests as re
from bs4 import BeautifulSoup
import os
#import threading

#定義一個爬去圖片的類
class Spider:
    # 傳入圖片地址,文件名,保存單張圖片
    def saveImg(self, imageURL, fileName):
        u 
= re.get(imageURL) data = u.content f = open(fileName, wb) f.write(data) f.close() def saveBrief(self, content, name): fileName = name + "/" + name + ".txt" f = open(fileName, "w+") f.write(content.encode(utf-8)) #創建新目錄 def mkdir(self,path): path
= path.strip() # 判斷路徑是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判斷結果 if not isExists: # 如果不存在則創建目錄 # 創建目錄操作函數 os.makedirs(path) return True else: # 如果目錄存在則不創建,並提示目錄已存在
return False #下載每期的圖片,並放入以標題為名字的目錄中 def GetDeatilPage(self, url,encodeing="utf-8",folder=""): res = re.get(url) res.encoding=encodeing soup = BeautifulSoup(res.text, "html.parser") imgs = soup.select("article.article-content > p > img")#根據元素匹配所有的圖片地址 if(len(imgs)>0): #檢查目錄是否存在,不存在就創建 if(folder!=""): folder=folder+"\\" self.mkdir(folder+imgs[0].attrs.get("alt"))#創建目錄 i=1 for img in imgs: imgurl = img.attrs.get("src")#獲取圖片路徑 self.saveImg(imgurl, img.attrs.get("alt")+"\\"+str(i)+".jpg")#保存圖片 i=i+1 #獲取頁面上所有的期數連接 def GetAllPageUrl(self,url): res=re.get(url) soup=BeautifulSoup(res.text, "html.parser") urls=soup.select("div.excerpts > article.excerpt > a.focus") return [a.attrs.get(href) for a in urls] def loop(i): spider=Spider() urls=spider.GetAllPageUrl("http://www.52rkl.cn/mengmeizi/list_51_"+str(i)+".html") for url in urls: spider.GetDeatilPage(url) for i in range(1,25): loop(i) # threading.Thread(target=loop,args=(i),).start() # threading.Thread(target=loop,args=((i)*3+1),).start() # threading.Thread(target=loop,args=((i+1)*3+1,)).start() # threading.Thread(target=loop,args=((i+2)*3+1),).start() # threading.Thread(target=loop,args=((i+3)*3+1),).start() # threading.Thread(target=loop,args=((i+4)*3+1),).start() # threading.Thread(target=loop,args=((i+5)*3+1),).start() # threading.Thread(target=loop,args=((i+6)*3+1),).start() print("成功")

本來想實現多線程的,奈何按照網上說的都無效,還是單線程下載。知道怎麽實現的還望不吝賜教。

git:https://github.com/dashenxian/ImageSpider

剛開始python學習。

Python爬蟲-萌妹子圖片