前面一文Scrapy爬虫抓取网站数据已经介绍了如何实现一个爬虫,文中介绍静态bbs网页的抓取。但是,互联网大部分的web页面都是动态的,经常逛的网站例如京东、淘宝等,商品列表都是js,并有Ajax渲染,这样就获取不到网页内容(获取到后台数据后再组合成html展示出来的)。单纯获取页面而没有执行到js的话是无法看到商品数据列表信息的。 Preliminaries抓取前先了解一些概念和工具。 什么是动态网页动态网页是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。与静态网页相对应的,能与后台数据库进行交互,数据传递。也就是说,网页 URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见形动态网页制作格式,而是以.aspx、.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”。可以通过以下方式简单验证某网页是否为动态网页。 在页面上右键查看源代码,和右键审查元素所看到的html代码是不一样的,如果后者中能看到商品数据信息,而前者没有的话,就说明这个页面是动态生成的。
SeleniumSelenium是Thoughtworks公司的一个集成测试的强大工具。Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。与其他测试工具相比,使用 Selenium 的最大好处是: Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。在浏览器加载js后,便可以通过xpath来解析网页了。可以先用 pip install 或 easy_install 安装 Selenium package。
编写 Spider 这里就不详细说明 获得检索商品页面 搜索某一款产品,如 Iphone6,我们就可以得到该产品检索结果的起始页面的
解析网页首先启用 selenium,这里用本地浏览器 Firefox:
得到所有产品的
然后提取页面(下一页),定义提取和过滤
这样我们的 Spider 就差不多定义好了。完整 Spider 程序如下:
结论本文介绍了利用 selenium 实现动态网站数据抓取的一种方法。但需要注意的是 selenium 需要运行本地浏览器,比较耗时,不太适合大规模网页抓取。因此可以尝试其它的 Javascript 加载工具,如 webkit、spynner,也可以调用无界面依赖的浏览器引擎 Casperjs、Phantomjs等。 |
|