领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

爬虫批量获取图片的思路与方法

nixiaole 2025-01-07 14:51:57 知识剖析 41 ℃

分析网站,梳理获取的思路:

查看到直接是有图片的链接的,但是这只是当前的页面,继续往下翻,发现有些图片是懒加载的,并没有图片的链接。对于未浏览到的内容,其提供的图片是空白的图片链接。

但是,他们都提供了图片详情页的链接。

所以这里有两个思路,一个是解决懒加载的问题,另外一个是获取图片详情页,进入图片详情页中再下载图片。这里我们选择第二种,至此,思路就清晰了。

整理思路:

请求要爬取的页面→获取该页面所有的图片详情页链接→请求详情页,获取具体的图片链接→请求图片具体链接,获取图片二进制内容,保存到本地

利用代码实现:

from curl_cffi import requests
from lxml import etree

url = "https://pixabay.com/zh/illustrations/search/%e8%87%aa%e7%84%b6/"

headers = {
    'User-Agent':'Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',    
}
# 第一次请求,获取该页面所有的图片详情页链接
req = requests.get(url,headers=headers,impersonate='chrome')

html_tree = etree.HTML(req.text)

pic_srclist = html_tree.xpath('//a[@class="link--WHWzm"]/@href')

# print(pic_srclist)
print(req.status_code)
i = 0
for pic_src in pic_srclist:
    i = i + 1
    picpage_url = "https://pixabay.com"+pic_src
    print('正在获取',i)
    #第二次请求,获取图片详情页中的图片链接
    temp_req = requests.get(url = picpage_url,headers=headers,impersonate='chrome')
    temp_tree = etree.HTML(temp_req.text)
    pic_url = temp_tree.xpath('//div[@class="container--3Mtk4"]//img/@src')[0]
    pic_alt = temp_tree.xpath('//div[@class="container--3Mtk4"]//img/@alt')[0]
    pic_name = pic_url.split('/')[-1]

    # 第三次请求,获取图片具体链接
    temp_req = requests.get(url = pic_url,headers=headers,impersonate='chrome')
    with open(pic_name,'wb') as f:
        f.write(temp_req.content)
    print(pic_name,'获取完成!')

终端输出:

爬取结果:

Tags:

最近发表
标签列表