爬虫递归爬取图片-自动翻页(可直接套用)

前期准备

需要下好一些包:

  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//")

猜你喜欢

转载自blog.csdn.net/jiwei_1234____5/article/details/103901897