Ajax简介

Ajax(全称Asynchronous JavaScript and XML,异步的JavaScript 和 XML),是一种利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。使用Ajax的示例有很多,比如说新浪微博和不凡商业的查看更多等。

Ajax分析

初步了解Ajax后,我们便可以知道其加载过程主要分为三个步骤:发送请求——解析内容——渲染页面。那么,我们又是如何判断页面是通过发送Ajax请求来动态加载的,又如何确定其请求的地址呢?

其实,判断一个页面是否为Ajax请求加载,我们可以借助Chrome浏览器的工具栏。以不凡商业网站为例,我们先调出Chrome浏览器的Network工具栏,选择XHR进行过滤(其实这一个就是代表请求的类型,也就是Ajax的请求类型),再刷新页面便可看到当前所有的Ajax请求了。

接着我们下拉到网页底部并试着点击查看更多,就会发现请求列表中多了一个请求,如图所示,我们再试着点击多次,又会有更多新的请求,因此我们也就可以确定这是通过Ajax来加载的。

由此,我们便可以通过分析每一个请求的请求头具体内容来获取数据源。如上图中的Request URL里的内容就是刚刚加载的数据的来源地址,我们打开一个新页面试着访问一下,发现了如下的内容:

粗略一看,我们想这应该是一个JSON数据格式,那就再试着把它放到解析站中看一看,结果不出我们所料,也证明了请求头里的请求URL正是网页的Ajax数据来源。

Ajax数据获取

在之前分析的基础上,实际我们就已经得到一种获取Ajax数据的方法:分析Ajax请求的URL构成法,然后对其进行页面解析再数据提取。这一种方法可以很直接地获取到源数据,性能较高,但分析的成本一般来说也都很大。因为并不是所有的URL构成法都是很容易得出来的,它可能混淆了很多加密机制,且通常需要有Js的功底辅助分析。

由此,我们提出了另一种策略:使用selenium模拟浏览器行为来获取动态解析获取数据。这里的selenium是什么呢?其实它相当于的机器人,它可以模拟出人为操作浏览器的行为,比如点击、输入,拖动等。其实最初这主要是用于网页测试,但发现其很符合爬虫的特性,也因此广泛用于爬虫领域。在服务器看来,它就是人在访问页面,而很难捕捉到是爬虫,因此安全性很高;但另一方面,使用它来获取Ajax数据成本很大,较为繁琐,性能不及分析URL。

上述就是常用的获取Ajax数据的两种方法,具体使用哪一种方法,我们可以先测试看一下所需要获取的Ajax数据来源URL构成法分析是否方便,如果较为规则便可以直接采用requests获取;反之,若较为复杂则可以考虑使用selenium策略(更多的介绍在后续笔记中将会给予说明)。