029. (7.30) Ajax数据爬取

Ajax数据爬取


我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档,而 浏览器中的页面则是经过 JavaScript 处理数据后生成的结果,这些数据的来源有多种,可能是通过 Ajax 加载的,可能是包含在 HTML 文档中的,也可能是经过 JavaScript 和特定算法计算后生成的。

对于 Ajax 加载(即异步的 JavaScript XML,非编程语言),数据加载是一种异步加载方式,原始的页面最初不会包含某些数据,原始页面加载完后,会再向服务器请求某个接口获取数据,然后数据才被处理从而呈现到网页上,这其实就是发送了一个 Ajax 请求

数据通过 Ajax 统一加载后再呈现出来,这样在 Web 开发上可以做到前后端分离,同时降低服务器直接渲染页面带来的压力。Ajax 页面,是 Web 发展的趋势。

所以,当遇到 Ajax 页面时,需要分析网页后台接口发送的 Ajax 请求。如果可以用 requests 来模拟 Ajax 请求,即可成功爬取数据。

Ajax 分析方法

因为我们要模拟 Ajax 请求,所以需要了解哪里可以看到这些后台 Ajax 操作,了解它到底是怎么发迭的,发了什么参数。

进入浏览器开发者工具中的 Network 选项卡,这里其实就是在页面加载过程中浏览器与服务器之间发送请求和接收响应的所有记录。

Ajax 有其特殊的请求类型 ,它叫作 xhr 。

点开一个 Ajax 请求,其中 Request Headers 中有个信息为 X-Requested-With:XMLHttpRequest ,这就标记了此请求是 Ajax 请求。 点击一下 Preview ,即可看到响应的内容,它是 JSON 格式的。 而 Response 选项卡,从中可观察到真实的返回数据。

因为可以清楚地看到其 Request URL 、Request Headers 、Response Headers 和 Response Body ,此时想要模拟请求和提取就变得简单了。

最后,从 Ajax 请求的新页面提取信息,利用 json 读取数据是常用方法。

实例列举:爬取新浪微博内容、爬取QQ音乐歌曲……

猜你喜欢

转载自blog.csdn.net/u013598957/article/details/107695268