Python3爬虫中关于Ajax分析方法的总结


Posted in Python onJuly 10, 2020

这里还以前面的微博为例,我们知道拖动刷新的内容由Ajax加载,而且页面的URL没有变化,那么应该到哪里去查看这些Ajax请求呢?

1. 查看请求

这里还需要借助浏览器的开发者工具,下面以Chrome浏览器为例来介绍。

首先,用Chrome浏览器打开微博的链接https://m.weibo.cn/u/2830678474,随后在页面中点击鼠标右键,从弹出的快捷菜单中选择“检查”选项,此时便会弹出开发者工具,如图6-2所示:

Python3爬虫中关于Ajax分析方法的总结

此时在Elements选项卡中便会观察到网页的源代码,右侧便是节点的样式。

不过这不是我们想要寻找的内容。切换到Network选项卡,随后重新刷新页面,可以发现这里出现了非常多的条目,如图6-3所示。

Python3爬虫中关于Ajax分析方法的总结

前面也提到过,这里其实就是在页面加载过程中浏览器与服务器之间发送请求和接收响应的所有记录。

Ajax其实有其特殊的请求类型,它叫作xhr。在图6-3中,我们可以发现一个名称以getIndex开头的请求,其Type为xhr,这就是一个Ajax请求。用鼠标点击这个请求,可以查看这个请求的详细信息,如图6-4所示。

Python3爬虫中关于Ajax分析方法的总结

在右侧可以观察到其Request Headers、URL和Response Headers等信息。其中Request Headers中有一个信息为X-Requested-With:XMLHttpRequest,这就标记了此请求是Ajax请求,如图6-5所示。

Python3爬虫中关于Ajax分析方法的总结

随后点击一下Preview,即可看到响应的内容,它是JSON格式的。这里Chrome为我们自动做了解析,点击箭头即可展开和收起相应内容,如图6-6所示。

Python3爬虫中关于Ajax分析方法的总结

观察可以发现,这里的返回结果是我的个人信息,如昵称、简介、头像等,这也是用来渲染个人主页所使用的数据。JavaScript接收到这些数据之后,再执行相应的渲染方法,整个页面就渲染出来了。

另外,也可以切换到Response选项卡,从中观察到真实的返回数据,如图6-7所示。

Python3爬虫中关于Ajax分析方法的总结

接下来,切回到第一个请求,观察一下它的Response是什么,如图6-8所示。

Python3爬虫中关于Ajax分析方法的总结

这是最原始的链接https://m.weibo.cn/u/2830678474返回的结果,其代码只有不到50行,结构也非常简单,只是执行了一些JavaScript。

所以说,我们看到的微博页面的真实数据并不是最原始的页面返回的,而是后来执行JavaScript后再次向后台发送了Ajax请求,浏览器拿到数据后再进一步渲染出来的。

2. 过滤请求

接下来,再利用Chrome开发者工具的筛选功能筛选出所有的Ajax请求。在请求的上方有一层筛选栏,直接点击XHR,此时在下方显示的所有请求便都是Ajax请求了,如图6-9所示。

Python3爬虫中关于Ajax分析方法的总结

接下来,不断滑动页面,可以看到页面底部有一条条新的微博被刷出,而开发者工具下方也一个个地出现Ajax请求,这样我们就可以捕获到所有的Ajax请求了。

随意点开一个条目,都可以清楚地看到其Request URL、Request Headers、Response Headers、Response Body等内容,此时想要模拟请求和提取就非常简单了。

图6-10所示的内容便是我的某一页微博的列表信息。

Python3爬虫中关于Ajax分析方法的总结

到现在为止,我们已经可以分析出来Ajax请求的一些详细信息了,接下来只需要用程序模拟这些Ajax请求,就可以轻松提取我们所需要的信息了。

在下一节中,我们用Python实现Ajax请求的模拟,从而实现数据的抓取。

以上就是Python3爬虫中关于Ajax分析方法的总结的详细内容,更多关于Python3爬虫里Ajax分析方法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python复制文件的方法实例详解
May 22 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python实现注册、登录小程序功能
Sep 21 Python
python对html过滤处理的方法
Oct 21 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
Django时区详解
Jul 24 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
Python如何实现FTP功能
May 28 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python3爬虫中Ajax的用法
Jul 10 #Python
Python3爬虫中Selenium的用法详解
Jul 10 #Python
Python3爬虫中Splash的知识总结
Jul 10 #Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 #Python
python3爬虫中异步协程的用法
Jul 10 #Python
浅析Python面向对象编程
Jul 10 #Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 #Python
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
解析php中curl_multi的应用
2013/07/17 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
如何编写jquery插件
2017/03/29 jQuery
基于javaScript的this指向总结
2017/07/22 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python中的set实现不重复的排序原理
2018/01/24 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Python流程控制 while循环实现解析
2019/09/02 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
服务之星获奖感言
2014/01/21 职场文书
门前三包责任书
2014/04/15 职场文书
党支部换届选举方案
2014/05/08 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Redis 常见使用场景
2021/08/30 Redis
python脚本框架webpy模板赋值实现
2021/11/20 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS