python爬虫学习44
Ajax数据爬取
有时我们使用request抓取页面时,经常出现我们获取到的内容和我们在浏览去实际看到的内容不一致的情况,这是由于我们通过requests得到的结果都是原始的HTML文档,而浏览器的页面是经过JavaScript数据处理之后的结果,这些数据有多种来源:
- 通过Ajax加载
- 包含在HTML文档中
- 经过JavaScript和特定算法处理后生成
我们今天要处理的问题就是第一种来源的数据,通过Ajax加载的数据通过一种异步的方式进行加载,原始页面不会包含某些数据,直到原始页面加载完成后,会再向服务器请求某个接口获得数据,然后数据才会经过处理呈现出我们所见的样子,这其实就是发送了一个Ajax请求。
在这种情况下,直接使用requests等库进行数据抓取就无法获得我们想要的数据。就需要我们分析网页的后台向接口发送Ajax请求。
1. 什么是Ajax
Ajax,全称Asynchronous JavaScript and XML(异步的JavaScript 和 XML),这是一种利用JavaScript在保证页面不被刷新、页面链接不改变的前提下与服务器交换数据并更新部分网页数据的技术。
例如,我们在网页上浏览微博时,向下浏览的时候会出现,下滑出现更多的选项,当我们下滑进行浏览时,此时网页没有变化,但是页面上却出现了新的内容,这就是一种Ajax加载的过程。
2.分析Ajax
进入微博后按下F12键,打开开发者页面,进行检阅: 可以看许多条请求,找到类型为xhr的请求,即为一条Ajax请求
首先找到一个Ajax类型的请求,查看其详细信息
可以看到最后一行,一个x-requested-with: XMLHttpRequest标记
preview标签中存储了响应的内容:
response标签,储存了法务其返回的原始数据:
正是通过这些返回的内容,从而实现了网页的渲染,让我们看到了我们现在看到的网页的样子。
今日结束,明日继续。。。
|