4.1 观察页面特征和解析数据
本章实例是实现一个大型爬虫,抓取某电商网站中某个频道的所有商品数据。
实现爬虫的第一步是观察页面特征和解析数据。
在第三章中,接触了JSON格式的数据,JSON格式的数据比较容易处理,所以在获取数据的时候最好选择JSON格式的数据。
通过对比PC端和无线端,这里决定数据采集自无线端,原因是无线端返回的数据是JSON格式。
这里以touch.qunar.com的自由行为例,如图所示。

在浏览器访问touch.qunar.com,·如图所示。

接下来按【F12】键进入开发者模式,单击“自由行”选项进入自由行频道,如图所示。

在自由行频道中单击搜索框,随后进入搜索页面,这个页面有各个地区的热门旅游城市列表(如下图所示),以JS(JScript)格式读取右侧的数据,在文件的Preview(预览)页面可以观察到树状的结构(如下图所示)。

切换到Headers(请求头)页面,在General(总体)信息中,有以下两条重要信息。
⑴Request URL(请求链接):将通过这个链接访问服务器获取数据。
⑵Request Method(请求方法):决定使用的函数方法和上传参数。常见的请求方法有GET方法和POST方法,其中GET方法权限单一,只有查询数据的权限,只要访问URL就可以返回数据;POST方法需要权限验证和请求内容,服务器通过权限放行,通过请求内容返回客户端请求的数据,POST方法具有查询和修改数据的权限。
如下图所示的请求方法即为GET方法。

在获取数据的时候,需要将最后一个callback参数删掉。
因此,目标URL如下。
https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep=%E5%8C%97%E4%BA%AC&exclude=&extensionImg=255,175
单击推荐列表中的任意一个城市(如下图所示),通过观察可以发现数据在XHR(用XMLHttpRequest方法来获取JavaScript)中(如图所示)。

切换Headers页面,观察Request URL和Request Method,如图所示。

其中Request URL如下。
https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep=%E5%8C%97%E4%BA%AC&query=%E5%8E%A6%E9%97%A8%E8%87%AA%E7%94%B1%E8%A1%8C&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery=%E5%8E%A6%E9%97%A8%E8%87%AA%E7%94%B1%E8%A1%8C&limit=0,20&includeAD=true&qsact=search
这个地址中%开头的字符串是中文编译成的字符串,由于服务器不能识别中文字符,所以必须将中文以某种编码方式编译后才能提交到服务器。也可以通过工具还原编码,链接地址如下所示:
http://tool.chinaz.com/tools/urlencode.aspx
如图所示。


通过该工具还原后的URL如下。
https://touch.dujia.qunar.com/list?modules=list,bookingInfo,activityDetail&dep=北京&query=厦门自由行&dappDealTrace=true&mobFunction=扩展自由行&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery=厦门自由行&limit=0,20&includeAD=true&qsact=search
经过解码还原后,可以观察到这里使用的是UTF-8编码,其中dep参数表示出发地(当时笔者在北京),query和originalquery表示目的地,通过修改这两个参数就可以控制遍历整个平台的自由行产品。
由于这里的目标是获取整个自由行的产品列表,因此还需要获取出发站点的列表,从不同的城市出发,会有不同的产品。
返回自由行的首页,单击搜索框左侧的出发地站点,如图所示。

可以看到全国各个出发站点根据字母顺序,在右侧的开发者页面中可以找到对应的数据包,如图所示。

切换Headers页面,观察Request URL和Request Method,如图所示。

此时的目标URL如下。
https://touch.dujia.qunar.com/depCities.qunar
浙公网安备 33010602011771号