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)


posted @ 2022-03-24 23:20  Tony_xiao  阅读(268)  评论(0编辑  收藏  举报