[Phantomjs系列] 概述(phantomjs还能用吗)

互联网上数据万千,只要适当的整理和分析就可以得到极有用的信息用来辅助决策,可问题是,海量的数据不会凭空而来,手动搜索更不现实,那该怎么办?爬虫,没错。就是万千在服务器后台运行的爬虫程序,能帮我们自动化的完成数据的目标性抓取和持久化,本系列主要就是介绍一种能够以模拟用户浏览器操作进而获取信息,抓取信息的工具---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以及其相关技术的使用和技术细节,并且也会附上一些笔者开发过程中遇到的问题和思考,希望和读者同仁共勉。