可以说,我是因为想批量下载一个网站的图片,才开始学的python爬虫。当一张一张图片自动下载下来时,满满的成就感,也满满的罪恶感……哈哈哈!!!窈窕淑女,君子好逑,这篇文章就讲讲我采集的第一个网站:
一、实现目标
根据一个图集的入口地址,下载该图集中的所有图片。图集的入口地址如下:
https://www.yeitu.com/meinv/xinggan/20231110_33358.html
二、网站分析
我们的目标是下载图片,那就需要得到图片文件的地址。
而图片文件的地址肯定是在图片详情页的html代码中,因此,只需要得到图片详情页的地址,就可以从它的html代码中获取图片文件的地址。
而图片详情页的地址与图片集入口地址存在着联系,即图片集入口地址加上图片序列号可得到图片详情页的地址。
总结一下,图片集入口地址——图片详情页地址——图片文件地址。
三、代码编写
- 通过图片集入口地址获取该图片集的图片总数
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)
- 通过图片集入口地址与图片序列号得到图片详情页地址的列表
def getPicPageUrlList(picSetPageUrl, picCount):
picPageUrlList = []
for index in range(picCount):
picPageUrl = picSetPageUrl.replace('.html', '_'+str(index+1)+'.html')
picPageUrlList.append(picPageUrl)
return picPageUrlList
- 通过图片详情页地址的列表得到图片文件地址的列表
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
- 通过图片文件地址下载图片文件
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男】,私聊号主获取。