requests高级之懒加载
-
图片懒加载:
- 主要是应用在展示图片的网页中的一种技术,该技术是指当网页刷新后,先加载局部的几张图片数据即可,随着用户滑动滚轮,当图片被显示在浏览器的可视化区域范围的话,在动态将其图片请求加载出来即可。(图片数据是动态加载出来)。
-
如何实现图片懒加载/动态加载?
- 使用img标签的伪属性(指的是自定义的一种属性)。在网页中,为了防止图片马上加载出来,则在img标签中可以使用一种伪属性来存储图片的链接,而不是使用真正的src属性值来存储图片链接。(图片链接一旦给了src属性,则图片会被立即加载出来)。只有当图片被滑动到浏览器可视化区域范围的时候,在通过js将img的伪属性修改为真正的src属性,则图片就会被加载出来。
-
爬取站长素材网站的图片资源
- url:https://sc.chinaz.com/tupian/meinvtupian.html
- 1、通过浏览器抓包工具分析,页面不是动态加载数据。
- 2、抓包定位到图片,我们发现图片的img标签,当图片显示在浏览器可视化区域时,src属性,当图片不在浏览器可视化页面时,为src2属性;
- 3、我们使用requests请求,那么都应该是非可视化页面
- 4、所以我们直接使用src2属性获取图片的地址即可
import requests,os
from lxml import etree
dirName = '站长素材美女'
if not os.path.exists(dirName):
os.mkdir(dirName)
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
url = 'https://sc.chinaz.com/tupian/meinvtupian.html'
#获取页面源码数据
res = requests.get(url = url,headers = headers)
res.encoding = 'utf8'
page_text = res.text
#数据解析
tree = etree.HTML(page_text)
div_list = tree.xpath('//*[@id="container"]/div')
# print(div_list)
for div in div_list:
img_url = 'https:' + div.xpath('./div/a/img/@src2')[0] #直接通过src2属性获取图片地址
img_name = div.xpath('./div/a/img/@alt')[0] + '.jpg'
# print(img_url)
img_data = requests.get(url = img_url,headers = headers).content
img_path = dirName + '/' + img_name
with open(img_path,'wb') as fp:
fp.write(img_data)