爬取图片懒加载页面

在带大家爬取图片懒加载页面之前, 先为大家介绍一下什么是图片懒加载, 懒加载有什么用, 在理解原理后再去爬取, 相信就会简单多了。

1.什么是懒加载

在一些网站或者app上会看到 鼠标或手势过快,而图片没有加载出来由色块或其他图片代替的情况,当图片出现在我们看到的视图中,再迅速将占位图片换成我们真正想展示的图片,这里使用了一种技术,图片懒加载

2.为什么要使用懒加载

当你打开一个网站时,浏览器会做许多工作,这其中包括下载各种可能用到的资源,然后渲染呈现在你面前,假设你的网站有大量的图片,那么加载的过程是很耗时的,尤其像那些新闻资讯类需要大量图片的网站,可想而知,网站的初始加载时间会很长,再加上网络等其它影响,用户体验会很差。我们都希望一输入网址,页面立马就呈现在眼前。
既然想要页面立马呈现在面前,那势必要减少浏览器的负荷,优化代码,减少一些不必要的请求和不必要资源的加载,因为你打开网站的时候,浏览器会把所有可能的资源都下载好,而实际上有些资源你并不需要用到,这就造成了浪费。所以有必要在一些资源上做下优化,提高网站加载速度。

那么介绍完了, 就该进入正题了, 我们应该如何爬取带有图片懒加载功能的页面。

3.如何爬取图片懒加载的网站

今天带大家爬取图片懒加载的网站是站长素材中的高清图片
点击这里进入站长素材

3.1 分析爬虫页面, 指定爬取流程

  1. url很容易确认, 当前的网址就是爬取的url

  2. 分析爬虫页面

    进入页面后, 我们可以打开控制台(F12), 并选中图片, 可以看到每一张图片就是一个div, 如下图

    在这里插入图片描述
    我们点击div, 逐层点开, 可以看到内层的img标签就是存放图片链接的
    在这里插入图片描述
    这时, 我们不要往下滑动, 将这个div收起来, 可以看到有多个div, 往下面滚动, 点击倒数的任意一个div, 然后再逐层点开, 我们会发现和第一个div看到的有所不同
    在这里插入图片描述
    此处的img中的src属性变成了src2, 这就是图片懒加载技术, 当图片没有正常渲染到页面之前, 所有的src都被替换成了src2, 只有当图片渲染到页面上, src2才会变成真正的src, 当然, 每个网站使用替换src的名称都不同, 可能别的网站是src100、src5…

    不过无论替换的名称是什么, 只要掌握了原理, 我们就可以正常爬取

  3. 对分析后的页面进行爬取并解析数据

  4. 将解析后的

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy可以使用Selenium或Splash来爬取动态加载页面。其中,Selenium是一个自动化测试工具,也可以模拟用户在浏览器中的操作,从而获取页面内容。而Splash是一个JavaScript渲染服务,可以模拟浏览器渲染页面,并且提供了API接口,方便与Scrapy集成。下面分别介绍使用Selenium和Splash来爬取动态加载页面的方法。 1. 使用Selenium 首先需要安装selenium库和对应的浏览器驱动,如ChromeDriver。然后在Scrapy的Spider中使用Selenium来获取页面内容,示例代码如下: ``` from scrapy import Spider from selenium import webdriver class MySpider(Spider): name = 'myspider' def start_requests(self): url = 'http://example.com' yield webdriver.Request(url, self.parse) def parse(self, response): driver = response.request.meta['driver'] # 使用driver来操作页面,获取需要的内容 ... ``` 在start_requests方法中,使用webdriver.Request来发送请求,并将回调函数设置为parse。在parse方法中,通过response.request.meta['driver']获取到了Selenium的WebDriver对象,然后就可以使用该对象来获取页面内容。 2. 使用Splash 首先需要安装Splash服务,并启动该服务。然后在Scrapy的Spider中使用Splash来获取页面内容,示例代码如下: ``` import scrapy from scrapy_splash import SplashRequest class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://example.com'] def start_requests(self): for url in self.start_urls: yield SplashRequest(url, self.parse, args={'wait': 0.5}) def parse(self, response): # 使用response来操作页面,获取需要的内容 ... ``` 在start_requests方法中,使用SplashRequest来发送请求,并将回调函数设置为parse。在args参数中,可以设置Splash的一些参数,如wait表示等待时间。在parse方法中,直接使用response来获取页面内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值