分析动态Ajax 爬取今日头条街拍美图

精彩文章

文末免费领取500G干货教程

今日分享:基于动态Ajax异步加载的网站爬虫

经常写爬虫的小伙伴应该会发现,很多网站前端展示的数据都是通过Ajax动态异步加载出来的,至于什么是ajax呢,可以参考百度百科https://baike.baidu.com/item/ajax/8425?fr=aladdin ,简单来说就是当你浏览一个网页时,浏览器不会一下子把所有相关的数据全部加载出来,而是只加载一部分,后面的数据会在你主动获取(比如下拉页面)的情况下慢慢加载出来,这样就会大大减少服务器在短时间内的大量需求。

Ajax异步加载虽然减轻了服务器的请求,带来了更好的用户交互,但是对于数据采集者无疑增加了难度。当然,面对这种情况因为并不是束手无策,下面就以Ajax异步加载的今日头条网站为例,具体来分析异步请求时应如何解析网站并实现规模爬取。

今日头条街拍美图爬虫项目流程分析

目标站点分析

打开浏览器在地址栏输入今日头条网址,并在右上角搜索框输入关键字 街拍

点击搜索出现以下界面,名点击图集一栏,即可出现我们所要爬取的内容,即每一个出现的图集,比如图片中的重庆街拍,街拍这两个图集,我们这一步的主要任务就是获取每一个图集的url,以便下一步获取图集中每个图片的url

右键审查元素,选中图片中上方两个红色框中内容刷新页面,分析每一个文档中的信息,会发现主要的数据存在于第一个offset开头的文件中,你会发现这个文档的格式为xhr,这就是Ajax格式文件,而其他的文档中都是些无用的文件,不再说明。

在这一步中,选中图片中最上方的三个红色框中的内容,并选中Headers一栏,会发现其请求的网页较长,原因在于页面内容是通过提交表单得到的,红色框中的为其根url,而后面的数据则是通过下方的表单中的数据通过编码处理提交上去的,从而获得页面信息

通过上面的介绍,我们发现页面内容存在于xhr的文件中,在这一步中,选中红色框中的选项,并不断下拉灰色滑动框,会发现会不断出现offset开头的xhr文件,正是这些文件动态加载出来了页面,点击第一个,会发现其是json格式的数据,主要的内容存放于data标签下。

下面具体说明data中的数据,如图所示点击data中的0索引,其就是第一个图集信息所在位置,可以发现其图集链接,图集中图片个数,图集标题,当然还有其他的信息,就不在一一细说,而我们想获取的就是图集的url

上面所有的介绍旨在获取图集链接,都是第一次请求请求所要完成的任务,而接下来的第二次请求就是获取每个图集中的所有单个图片的链接,我们随便点击一个图集链接,具体分析如下:页面的主要信息是在图中所示红色框中的文档中,图片相关信息包含在JS中,多是以字典形式存在的,在该次请求中我们要获取的就是图集标题,图片链接。

通过以上分析,我们最终获取到了每一个图集的链接,每一个图集中所有单个图片的链接,通过第三次请求即可下载保存图片到本地。

代码演示

导入相关库

获取图集链接

第一次请求,由于数据是以json格式存放的,那么我们在获取数据时需要利用json库来进行解析。

获取每个图集中的所有具体图片链接及标题

第二次请求

下载保存图片到本地

第三次请求,就是以二进制格式获取下载每一个图片,把每一个图集中的所有图片存放在同一个文件夹下

主函数

运行函数

下载过程打印输出

下载结果部分展示

代码已上传至QQ学习群

干货免费分享

关注公众号即可一键领取

省去找资料的麻烦

为您的学习保驾护航

您的点赞与转发是我们前进的最大动力!

扫二维码进交流学习群

最新同步更新资料请到该QQ群获取

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180528G1ZWAL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券