互联网上数据万千,只要适当的整理和分析就可以得到极有用的信息用来辅助决策,可问题是,海量的数据不会凭空而来,手动搜索更不现实,那该怎么办?爬虫,没错。就是万千在服务器后台运行的爬虫程序,能帮我们自动化的完成数据的目标性抓取和持久化,本系列主要就是介绍一种能够以模拟用户浏览器操作进而获取信息,抓取信息的工具---Phantomjs,当然,它是基于Nodejs的。
本系列准备包含以下几个部分:
一 Phantomjs是个什么鬼?
它的开发者Ariya Hidayat 在官方网站上这样介绍:
PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast andnative support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.
也就是说它是一套具有JS编程接口的无头Webkit浏览器内核。所谓无头,就是没有浏览器的用户界面;所谓Webkit,众所周知,它是chrome的开源浏览器引擎,它WebKit的优势在于高效稳定,兼容性好,且源码结构清晰,易于维护。
二 它的核心功能是什么?
网站的无头测试(HEADLESS WEBSITE TESTING)
使用开源测试框架对网站页面进行功能性测试。
屏幕抓取(SCREEN CAPTURE)
根据网页生成截图。
操作页面元素(PAGE AUTOMATION)
操作网页DOM文档树,注入JS代码或者类库到代码中完成功能
网络监测(NETWORK MONITORING)
分析网站性能。
以上特性,使得Phantomjs结合任何一种语言或者框架都能轻松地完成网页数据的推送和抓取,本系列采用的框架是Nodejs成名已久的Express。通过前台页面生成子任务,出发爬虫进行数据的推送和爬取,还可以进行一定的持久化工作。
三. 谁在用它?
基于上述优良特性和开源品质,毋庸置疑,Phantomjs会成为开源社区的宠儿,就像它的作者在主页上写的那样:
PhantomJS is used in the test workflow of various open-source projects:
Bootstrap, CodeMirror, Ember.js, jQuery Mobile, Less.js, Modernizr, YUI3, and many more.
四. 有什么竞品可以参考吗?
Casperjs:Casperjs继承了Phantomjs的优良特性,且改善了接口的易用性,结束了前者的当多个动作连续发生时的处理问题,采用简单的同步方式来处理逻辑流程,对开发者更加友好和易用。
系列简介
本系列主要将介绍Phantomjs以及其相关技术的使用和技术细节,并且也会附上一些笔者开发过程中遇到的问题和思考,希望和读者同仁共勉。