PhantomJS初探

最近想写一个程序爬网页接口的数据,由于本人是前端开发者,对于后端的一些爬虫工具不甚了解。首先所爬接口需要动态的在url加query参数,爬取数据。其次为了防止接口被封我初步设想希望能后定时爬取接口,比如间隔500ms爬取一条数据,而且每天爬取一次。开始我是开发一个网页,每天打开里面的js脚本自动执行请求接口,然后将请求的接口数据保存到后台mysql数据库中。这种方法需要人工每天打开网页进行爬取。于是翻阅资料了解phantomjs可以实现我想要的功能。

正常的网页我们需要浏览器打开才能访问,但是通过phontomjs的虚拟浏览器环境可以在后端打开一个网页,可以正常的执行js,生成dom。这样就可以在后端打开一个网页,并且使用pm2守护进程,保持网页一直打开,在网页js中设置定时器,每天固定时间出发爬取动作。

var page = require('webpage').create(),
    system = require('system'),
    address;
address = system.args[1];
var url = 'http://*******';
 
//init and settings
page.settings.resourceTimeout = 30000 ;
page.settings.XSSAuditingEnabled = true ;
//page.viewportSize = { width: 1000, height: 1000 };
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
page.customHeaders = {
    "Connection" : "keep-alive",
    "Cache-Control" : "max-age=0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6",
};
page.open(url, function() {
  console.log(url);
  console.log('begin');
});
//加载页面完毕运行
page.onLoadFinished = function(status) {
  console.log('Status: ' + status);
  console.log(page.content);
  //phantom.exit();
};

  如上代码,webpage是phantomjs的核心模块,他可以模拟浏览器打开网页的动作,比如page.setting.userAgent可以设置ua,page.setting.customHeader可以模拟浏览器的请求头部参数,page.open是请求网页,page.onLoadFinished 是网页加载完成的回调函数。

pnontomjs还可以做很多其他的工作。比如网页截图,可以将目标网站的网页整个ui截图保存本地。抓取网页的图片。最重要的是可以用来分析网页的性能,因为它可以监听网页不同的状态,提供相应的回调函数,例如 page.onInitialized,page.onLoadStarted,page.onLoadFinished等监听网页状态的回调函数,可以通过在这些回调函数中埋点,记录时间,就可以用来分析网页的性能。

posted @ 2018-07-08 16:34  leejay-blog  阅读(241)  评论(2编辑  收藏  举报