其他分享
首页 > 其他分享> > 【零基础学爬虫】分析Ajax,抓取今日头条街拍美图

【零基础学爬虫】分析Ajax,抓取今日头条街拍美图

作者:互联网

简介

本文通过分析Ajax请求,然后使用requests来爬取今日头条街拍美图数据。有些网页直接请求并没有包括我们在浏览器中看到的内容,这是因为这些信息是通过Ajax加载,并且通过js渲染生成的,这时候就需要我们分析网页的请求。
本文使用的解析库是Beautifulsoup和正则表达式,请求使用的是requests

目标站点分析


今天我们要爬取的就是上图中的图片
(1)请求分析
邮件->检查->network->preserve log 重新刷新页面,查看key words请求的返回结果

对返回结果分析发现:里面都是一些js,并没有我们需要的街拍图片信息
这些数据其实是通过Ajax来加载的,如下图:

下面截图中的share_url对应的就是左边第一个结果点进去后的超链接,另外,用鼠标不断下滑页面:

随着你不断下滑浏览页面,Ajax请求也越来越多,也就是说:页面上的数据不是一次性加载的,是随着页面的滑动动态加载的更具体而言,这些请求如下:

实际上改变offset就可以获取到对应返回的json数据了,我们需要的是一个循环,改变请求链接中的offset,去请求这些地址就可以获取到对应的数据了。得到返回的就送数据后,使用json解析数据就可以了

整体搜索结果分析之后,我们进入一个具体的结果,分析每一个结果集的数据图片是通过什么方式加载的,我们点击任意一个“街拍 图集”的搜索结果:

上面这张图是片是通过什么方式加载的呢?也会是Ajax吗?请求分析:

对原始的请求分析发现:图片链接地址在js变量中:

由于gallery变量不是隐藏在html中,我们就不能使用Beautifulsoup和PyQuery等解析库去解析,比较简单的方式就是正则表达式解析。

流程框架分析

实现分析

在获取“街拍 美图”的关键词搜索结果时注意参数设置

上图是搜索关键词后返回的结果,由之前分析知道,返回结果是通过Ajax动态加载的,每一个Ajax请求都有对应的参数也就是上图中红色方框中的那部分参数,不同Ajax请求只需要更改offset即可,offset每次递增20。斌并且有请求头知道,Ajax是get请求:

上述参数在代码中就是对应字典形式
然后通过url拼接和urlencode(字典参数)拼接请求地址
urlencode可以将字典参数转换成url请求参数,由urllib库提供的方法

源码和数据:

** 爬取的数据**


扫描下方二维码,发送关键词“街拍美图”即可获取本文的完整源码和详细程序注释
扫码关注,及时获取更多精彩内容。(博主今日头条大数据工程师)
公众号专注:互联网求职面经javapython爬虫大数据等技术、海量资料分享:公众号后台回复“csdn文库下载”即可免费领取【csdn】和【百度文库】下载服务;公众号后台回复“资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

标签:分析,请求,结果,爬虫,Ajax,美图,数据,加载
来源: https://blog.csdn.net/liewen_/article/details/89417829