【Python3 爬虫学习笔记】Ajax数据爬取 1

有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有。这是因为requests获取的都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果,这些数据的来源有多种,可能是通过Ajax加载的,可能是包含在HTML文档中的,也可能是经过JavaScript和特定算法计算后生成的。
对于第一种情况,数据加载是一种异步加载方式,原始的页面最初不会包含某些数据,原始页面加载完后,会再向服务器请求某个接口获取数据,然后数据才被处理从而呈现到页面上,这其实就是发送了一个Ajax请求。
照Web发展的趋势来看,这种形式的页面越来越多。页面的原始HTML文档不会包含任何数据,数据都是通过Ajax统一加载后呈现出来的,这样在Web开发上可以做到前后端分离,而且降低服务器直接渲染页面带来的压力。
所以如果遇到这样的页面,直接利用requests等库来抓取原始页面,是无法获取到有效数据的,这时需要分析页面后台向接口发送的Ajax请求,如果可以用requests来模拟Ajax请求,那么就可以成功抓取了。

什么是Ajax

Ajax,全称Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。
对于传统的网页,如果想更新其内容,name必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。在这个过程中,页面实际上是在后台与服务器进行了数据交互,获取到数据之后,再利用JavaScript改变页面,这样网页内容就会更新了。

基本原理

初步了解Ajax之后,我们再来详细了解它的基本原理。发送Ajax请求到网页更新的这个过程可以简单分为以下3步:
(1)发送请求;
(2)解析内容;
(3)渲染网页。

Ajax分析方法

查看请求

Ajax其实有其特殊的请求类型,它叫作xhr。如下图所示:
【Python3 爬虫学习笔记】Ajax数据爬取 1_第1张图片
在右侧可以观察到其Request Headers、URL和Response Headers等信息。其中Request Headers中有一个信息为X-Requested-With:XMLHttpRequest,这就标记了此请求是Ajax请求,如图所示:
【Python3 爬虫学习笔记】Ajax数据爬取 1_第2张图片
所以我么看到的微博页面的真实数据并不是最原始的页面返回的,而是后来执行JavaScript后再次向后台发送了Ajax请求,浏览器拿到数据后再进一步渲染出来的。

过滤请求

接下来,再利用Chrome开发者工具的筛选功能筛选出所有的Ajax请求。在请求上方有一层筛选栏,直接点击XHR,此时在下方显示的所有请求便都是Ajax请求了。
【Python3 爬虫学习笔记】Ajax数据爬取 1_第3张图片
接下来,不断滑动页面,可以看到页面底部有一条条新的微博被刷出,而开发者工具下发也一个个地出现Ajax请求,这样我们就可以捕获到所有的Ajax请求了。

你可能感兴趣的:(学习笔记)