JS渲染引擎比较HtmlUnit/Selenium/PhantomJs
现如今的爬虫再也不是简单的爬取静态页面,解析Html文本这么简单,许多单页面应用,异步请求调用,页面初始化js渲染等技术的使用,使得传统的通过发起http请求获得的Document无法直接使用。因此,基于实际业务需求,在爬取某电商平台数据时,发现其页面特定位置为js渲染,固此,由此一文,基于实际代码测试,分析HtmlUnit/Selenium/PhantomJs三类流行的js渲染引擎。
-HtmlUnit
1) 内置Rhinojs浏览器引擎,没有哪一款浏览器使用该内核
2) 解析速度一般
3) 解析JS/CSS差
4) 无浏览器界面
- Selenium
1) Seleninum 1+ WebDriver = Selenium
2) 基于本地安装的浏览器,需打开浏览器
3) 需要引用相应的WebDriver,正确配置webdriver的路径参数
4) 在爬取大量js渲染页面时明显不合适
- PhantomJs
1) 神器,短小精悍
2) 可本地化运行,也可作为服务端运行
3) 基于webkit内核,性能及表现良好
4) 完美解析绝大部分页面
基于实测结果,在爬取大量任务时,推荐将PhantomJs作为服务端使用,此处,分别介绍本地及远程服务端使用例子(也可查看官网example)
本地
需要构造目标执行的js文件,利用命令行调用PhantomJS
示例:
window平台下
PhantomJs.exe target.js param1
对应的本地target.js可参考如下示例:
"use strict";
var page = require('webpage').create();
var system = require('system');
if (system.args.length !== 2) {
console.log('Usage: server.js <some port>');
phantom.exit(1);
} else {
var url = system.args[