爬蟲遞歸爬取圖片-自動翻頁(可直接套用)

前期準備

需要下好一些包:

  1. request
  2. urllib3
  3. 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//")
發佈了12 篇原創文章 · 獲贊 6 · 訪問量 2338
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章