前期準備
需要下好一些包:
- request
- urllib3
- PyQuery
安裝教程有很多,我就不過多描述了
值得一提的是PyQuery可以使用類似CSS選擇器的方式選擇標籤,大大的提高了選擇標籤的效率
我使用了遞歸爬取組圖只需要傳入組圖的第一頁地址,和找到下一頁地址就可以遞歸爬取了,直接看代碼吧
import requests
import os
import time
from requests.packages import urllib3
from pyquery import PyQuery as pq
def getNextPageUrl(doc):
linkList=doc("a")
nextUrl=""
for item in linkList.items():
a=item.text().strip()
temp=a[0:3]
# print(temp)
if temp=="下一頁":
# print(temp)
nextUrl=item.attr('href')
return nextUrl
def getAllImgByUrl(url,savePath):
#請求頭信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/58.0.3029.110 Safari/537.36'
}
urllib3.disable_warnings()
re= requests.get(url, headers=headers, verify=False)
re.encoding='utf-8'
html = re.text
# print(html)
doc = pq(html)
a = doc('img')#獲取所有圖片標籤 也可以通過選擇器只選到我們想要的圖片
nextUrl=getNextPageUrl(doc)
print(nextUrl)
flag=0#標記這一頁已爬取的圖片數,如果大於4則認爲這一頁已經爬取過,跳過這一頁
for item in a.items():
d = item.attr('data-original') #獲取圖片的下載路徑,有的下載地址使用的可能是src屬性
if d==None:
break
path=savePath+d.split('/')[-1]
print(path)
try:
if not os.path.exists(savePath):
os.mkdir(savePath)
if not os.path.exists(path):
r=requests.get(d, headers=headers, verify=False)
r.encoding='utf-8'
with open(path,'wb')as f:
f.write(r.content)
f.close()
# print("文件保存成功",'\n','\n')
else:
print("文件已存在")
flag=flag+1
if flag>3:
print("跳過這一頁")
break
except:
print("爬取失敗")
getAllImgByUrl(nextUrl,savePath)
if __name__ == '__main__':
url="https://www.mzitu.com/"#組圖第一頁
getAllImgByUrl(url,"D://fulitu//test//")