90%的人学Python爬虫都干过这种事,别不承认!

33 阅读2分钟

可以说,我是因为想批量下载一个网站的图片,才开始学的python爬虫。当一张一张图片自动下载下来时,满满的成就感,也满满的罪恶感……哈哈哈!!!窈窕淑女,君子好逑,这篇文章就讲讲我采集的第一个网站:

图1.PNG

一、实现目标

根据一个图集的入口地址,下载该图集中的所有图片。图集的入口地址如下:

https://www.yeitu.com/meinv/xinggan/20231110_33358.html

图2.PNG

二、网站分析

我们的目标是下载图片,那就需要得到图片文件的地址。

图3.PNG

而图片文件的地址肯定是在图片详情页的html代码中,因此,只需要得到图片详情页的地址,就可以从它的html代码中获取图片文件的地址。

图4.PNG

而图片详情页的地址与图片集入口地址存在着联系,即图片集入口地址加上图片序列号可得到图片详情页的地址。

图5.PNG

总结一下,图片集入口地址——图片详情页地址——图片文件地址。

三、代码编写

  1. 通过图片集入口地址获取该图片集的图片总数
def getPicCount(picSetPageUrl, headers):
    response = requests.get(url=picSetPageUrl, headers=headers)
    html = etree.HTML(response.text)
    picCount = html.xpath("//div[@class='pages uk-text-center']/a[last()-1]/text()")[0]
    return int(picCount)
  1. 通过图片集入口地址与图片序列号得到图片详情页地址的列表
def getPicPageUrlList(picSetPageUrl, picCount):
    picPageUrlList = []
    for index in range(picCount):
        picPageUrl = picSetPageUrl.replace('.html', '_'+str(index+1)+'.html')
        picPageUrlList.append(picPageUrl)
    return picPageUrlList
  1. 通过图片详情页地址的列表得到图片文件地址的列表
def getPicUrlList(picPageUrlList, headers):
    picUrlList = []
    for picPageUrl in picPageUrlList:
        response = requests.get(url=picPageUrl, headers=headers)
        html = etree.HTML(response.text)
        picUrl = html.xpath("//div[@class='article-body cate-6']//img/@src")[0]
        picUrlList.append(picUrl)
    return picUrlList
  1. 通过图片文件地址下载图片文件
def getPic(index, picUrl, headers):
    suffix = picUrl.split(".")[-1]
    response = requests.get(url=picUrl, headers=headers)
    with open('output/'+str(index+1)+'.'+suffix, 'wb') as file:
        file.write(response.content)

四、源码获取

如果需要完整源代码,可以关注微信公众号【愤怒的it男】,私聊号主获取。