資源簡介
可以直接下載整站的圖片
代碼中使用多線程進行批量下載
代碼中相關的內容已經加了注釋 下載的同學應該可以自行修改里面的代碼了
代碼中使用多線程進行批量下載
代碼中相關的內容已經加了注釋 下載的同學應該可以自行修改里面的代碼了
代碼片段和文件信息
import?requests
import?os
from?lxml?import?etree
from?threading?import?*
from?time?import?sleep
nMaxThread?=?3??#這里設置需要開啟幾條線程
ThreadLock?=?BoundedSemaphore(nMaxThread)
gHeads?=?{
????“User-Agent“:“Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML?like?Gecko)?Chrome/55.0.2883.87?Safari/537.36“
}
class?Meizitu(Thread):
????#構造函數
????def?__init__(selfmainRefererurltitle):
????????Thread.__init__(self)?#調用父類構造函數
????????self.MainReferer?=?mainReferer??
????????self.url?=?url
????????self.title?=?title[3:-4]??#這里是為了把給刪除??因為網站中的titles是這個是一個標題??同時?正好是3?右邊?正好是-4
????#線程開始函數
????def?run(self):
????????try:
????????????urlList?=?self.GetPhotoUrl()
????????????if?len(urlList)?>?0?and?urlList?!=?None:
????????????????self.SavePath(urlList)
????????????
????????finally:#當線程執行完成之后釋放?說明這個線程已經結束了?不管是異常結束還是正常結束?他都是結束了?那么就需要啟動下一個新的線程來執行?新的內容了?
????????????ThreadLock.release()
????#獲取圖片url列表
????def?GetPhotoUrl(self):
????????heads={
????????????“Referer“:self.MainReferer
????????}
????????heads.update(gHeads)
????????html?=?requests.get(self.urlheaders=heads)
????????if?html.status_code?==?200:
????????????xmlContent?=?etree.HTML(html.text)
????????????urlList?=?xmlContent.xpath(“//div[@id=‘picture‘]/p/img/@src“)??#獲取所有圖片列表
????????????return?urlList
????????else:
????????????return?None
????#保存圖片?如果文件夾不存在則創建文件夾
????def?SavePath(selfurlList):
????????heads?=?{
????????????“Referer“:?self.url?#這里是referer是因為網站有防盜鏈?加了這個字段就可以過掉他的防盜鏈
????????}
????????heads.update(gHeads)
????????savePath?=?“./photo/%s“?%?self.title
????????if?not?os.path.exists(savePath):??#判斷文件夾是否存在
????????????os.makedirs(savePath)???#makedirs?是遞歸創建目錄??mkdir是創建目錄?區別就是在于遞歸是可以創建深層
- 上一篇:python調用cplex進行網絡規劃
- 下一篇:魔塔
評論
共有 條評論