需求
爬取图片网站首页上的图片
实现
- 通过抓包工具确定图片不是动态加载,使用etree.xpath定位图片标签位置,通过
src=""
尝试捕获图片数据,但只捕获到单张图片 - 查看图片标签信息,在页面刷新时前几张图片地址为
src=""
,没有经过鼠标滚轮,直接查看尾端图片标签,图片地址为src2=""
,明确实际请求中存在图片懒加载。 - 图片懒加载:只有当图片被显示在浏览器可视化范围之内才会将img的伪属性变成真正的属性。如果是requests发起的请求,requests请求是没有可视化范围,因此我们一定要解析的是img伪属性的属性值
- 将tree.xpath(’./div/a/img/@src’)修改为tree.xpath(’./div/a/img/@src2’),解析img伪属性的属性值,完成需求。
- (此处直接下载首页图,为小图形式)
import requests
from lxml import etree
import os
dirName = 'GuDianLib'
if not os.path.exists(dirName):
os.mkdir(dirName)
main_url = 'https://sc.chinaz.com/tupian/gudianmeinvtupian.html'
response = requests.get(url=main_url,headers=headers)
response.encoding='utf-8'
page_text = response.text
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@id="container"]/div')
for div in div_list:
title = div.xpath('./div/a/img/@alt')[0]+'.jpg'
src_one = 'https:' + div.xpath('./div/a/img/@src2')[0]
img_data = requests.get(url=src_one,headers=headers).content
imgPath = dirName+'/'+title
with open(imgPath,'wb')as fp:
fp.write(img_data)
print(title,'下载成功')
注意:标签嵌套多个div,选错div会导致地址出错