python怎么加载图片-python爬虫--图片懒加载

图片懒加载

是一种反爬机制,图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。

如何实现图片懒加载技术

在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original…)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

案例

爬取站长之家的图片素材

import scrapy

import requests

headers={

'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'

}

class ImgzzSpider(scrapy.Spider):

name = 'imgzz'

start_urls = ['http://sc.chinaz.com/tupian/']

def parse(self, response):

src = response.xpath('//*[@id="container"]/div/div[1]/a/img/@src').extract()

print(src) # 打印结果为空,这里的图片属性就应用的图片懒加载技术,其实图片的真正的src不是图片真正的属性

for url in src:

name = url.split('/')[-1]

img = requests.get(url=url,headers=headers).content

with open(name,'wb') as f:

f.write(img)

分析:

正常访问时:

1730057-20191210085000940-1609542373.png

这样直接写xpath表达式定位标签的话获取的值为空

当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。通过js来完成对图片属性的替换

1730057-20191210085013305-717848884.png

1730057-20191210085028401-1959083808.png

import scrapy

import requests

headers={

'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'

}

class ImgzzSpider(scrapy.Spider):

name = 'imgzz'

start_urls = ['http://sc.chinaz.com/tupian/']

def parse(self, response):

src = response.xpath('//*[@id="container"]/div/div[1]/a/img/@src2').extract() #改为图片的真正属性

print(src)

for url in src:

name = url.split('/')[-1]

img = requests.get(url=url,headers=headers).content

with open(name,'wb') as f:

f.write(img)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值