从做网站的技术角度来看,网页上展示的所有资源内容都由客户端发送请求从服务器获取的,而绝大部分又是通过HTTP/HTTPS协议来实现的。网络爬虫的基本原理就是通过这些协议,访问资源对应的URL,下载到对应的内容。
随着web技术的发展和产品效果的需要,很多的数据内容是根据用户的操作变化展示的,这就是动态的数据内容,要获取到这些内容,实际能模仿用户的操作就能办到了,但对于爬虫有不同的技术去实现;比如通过调用浏览器内核来加载、渲染页面后提取数据的爬虫,就可以直接模拟人的操作,点击网页上的按钮进行操作便可加载到想要的数据,这种方法从理解上来说,可以说是最简单的,但对实际应用上来说,可取性并不高(从稳定性、效率、资源消耗等方面考虑)。
网页中动态内容的加载,往往是根据用户的操作,通过AJAX等技术通过根据某种规则生成的URL从服务器获取数据并加载到页面中,要采集到这些动态加载的数据,实际只需要找到加载动态数据的URL便可——找到生成URL的规则,下面就说说怎么找到生成URL的规则。
第一种,读代码,这是最直接的一种,理论上也是最靠谱的,只是难度有点大。一般动态生成URL动态加载的方式都是通过JS实现的,只要找到入口,顺着把相关的JS文件找到读下去,肯定是能找到规则的;只是因为网站发布的JS往往都是不易读的,这种方法做下来会很费劲。
第二种,抓包推测法,这是一种比较靠谱的方法,直接在浏览器中输入页面的URL,然后查看整个页面加载完成后,访问的所有链接(URL),筛选出要采集的数据内容所使用的URL;然后对于不同的操作查看想对应的URL,把这些URL对比变化,便可以找到URL的规则了;在采集的过程中国便可以根据这些规则拼装URL去获取需要采集的数据(往往很多动态数据都是以JSON或XML的格式返回的,解析就更方便了)。
对于抓包法,这里简单介绍用浏览器怎么做:打开chrome(FireFox也行)浏览器,右键后选择“审查元素”,这样就打开了调试窗口,点击其中的“Network"这一栏;然后在浏览器地址栏输入要访问页面的URL,这样在访问中所有的网络访问URL都会在调试窗口中被记录下来,然后查看非图片的连接内容,便可筛选,对于已经知道URL一部分信息的可以通过调式窗口中的“过滤器”进行直接过滤。(下图是访问tmall商品详情页面,过滤加载价格信息的URL情况,对于使用不同浏览器抓包的情况,可以参考:http://jingyan.baidu.com/article/3c343ff703fee20d377963e7.html)。

对于网页中使用重定向的情况,用浏览器可能获取的URL就不全面,可以考虑用Wireshark、Fiddler、Httpwatch、HttpAnalyzer等抓包工具,需要使用的同学,可以下载看相关的文档说明,这里就不再赘述了。

