PhantomJS简单爬虫应用实例:抓取目标url指定数据并截图

PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。
基于这点,我们可以利用PhantomJS做一个小爬虫。

需求:
抓取公司资讯-巨潮资讯财务指标页面上该公司的资产负债率。


环境:
下载并安装PhantomJS ,并添加Path环境变量。

代码如下(test.js):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var page = require('webpage').create(); //创建webpage对象
var url = 'http://www.cninfo.com.cn/information/companyinfo_n.html?fulltext?szcn300023'; //设置目标url地址
phantom.outputEncoding = 'gbk'; //设置编码
page.open(url, function (status) //打开页面
{
if (status != 'success') //判断是否载入成功
{
console.log('Page failed to load.');
}
page.evaluate(function() //调出console控制台对上下文进行交互
{
toLm('cwzb'); //跳转到“财务报表”页面
window.scrollTo(0,10000); //滑动至页底
window.setTimeout(function() //延迟5000ms进行DOM操作抓取目标节点Node内容
{
var data = String(document.querySelectorAll('iframe')[0].contentDocument.querySelector('.zx_left').childNodes[3].childNodes[1].childNodes[1].childNodes[16].childNodes[3].childNodes[1].childNodes[0].nodeValue);
console.log(data); //打印至控制台
},5000);
});
page.onConsoleMessage = function(msg, lineNum, sourceId) //输出控制台内容
{
console.log('CONSOLE:' + msg);
};
window.setTimeout(function () //延迟5500ms进行页面截图并保存为'screenshot.png'
{
page.render('screenshot.png');
phantom.exit();
}, 5000+500);
});

输出结果

输出至文本(data.txt)

参考资料:PhantomJS.org