微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【零基础学爬虫】分析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动态加载的,只需要使用requests请求即可(更改offset),每个Ajax请求返回的是多个搜索结果@H_404_73@
  • 每个搜索结果的详情数据页的图片地址在js中(如上图所示),使用正则匹配即可@H_404_73@

实现分析

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


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


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

源码和数据:

** 爬取的数据**


扫描下方二维码,发送关键词“街拍美图”即可获取本文的完整源码和详细程序注释

扫码关注,及时获取更多精彩内容。(博主今日头条大数据工程师)


公众号专注:互联网求职面经javapython爬虫大数据等技术、海量资料分享:公众号后台回复“csdn文库下载”即可免费领取【csdn】和【百度文库】下载服务;公众号后台回复资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐