我们发现 图片名称没问题 但地址却没有提取出来。。。
难道代码流程写错了吗 如果错的话 那名称怎么会正常提取的到呢
好吧 我们再来分析下源码
翻着翻着 我突然发现 后面的图片地址属性不是src,而是src2。
这是上面原因呢
原来 图片在没加载的时候是src2 加载后那就是src。 我们可以在Network里的响应看下 这里肯定都是没加载的静态数据
那我们提取的属性就应该是src2 那改下代码看下
for div in div_list: title div.xpath( ./a/img/ alt ) img_src div.xpath( ./a/img/ src2 ) print(title,img_src)
果然 全都获取到了。
上述问题解释
这里涉及到了又一个反爬机制 图片懒加载
反爬机制 图片懒加载 广泛应用在了一些图片的网站中。
只有当图片被显示在浏览器可视化范围之内 才会将img的伪属性变成真正的属性。
如果是requests发起的请求 requests请求是没有可视化范围 因此我们一定要解析的是img伪属性的属性值 图片地址
到此 我的文章所学过的反爬机制
roboys UA伪装 动态加载数据的捕获 图片懒加载
后面我们会学习更多的反爬机制
好了 既然我们都获取到了 现在我们下载前五页的图片。
完整代码如下
import requests
from lxml import etree
import os
# 创建文件夹保存图片
dirName eluosi
if not os.path.exists(dirName):
os.mkdir(dirName)
headers {
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
# url模板
url https://sc.chinaz.com/tupian/eluosi_%d.html
# 循环5次 爬取5页
for page in range(1, 6):
if page 1:
new_url https://sc.chinaz.com/tupian/eluosi.html
else:
new_url format(url % page)
response requests.get(url new_url, headers headers)
response.encoding utf-8
page_text response.text
tree etree.HTML(page_text)
div_list tree.xpath( //div[ id container ]/div/div )
# 局部数据分析
for div in div_list:
title div.xpath( ./a/img/ alt )[0]
img_src https: div.xpath( ./a/img/ src2 )[0]
img_path dirName / title .jpg
img_data requests.get(url img_src, headers headers).content
# 保存图片
with open(img_path, wb ) as f:
f.write(img_data)
print(title 下载成功 )
最后 肤白貌美大长腿的俄罗斯美女就下载到了硬盘了
关注 Python涛哥 学习更多Python知识



