最近想写一个程序爬网页接口的数据,因为本人是前端开发者,对于后端的一些爬虫工具不甚了解。首先所爬接口须要动态的在url加query参数,爬取数据。其次为了防止接口被封我初步设想但愿能后定时爬取接口,好比间隔500ms爬取一条数据,并且天天爬取一次。开始我是开发一个网页,天天打开里面的js脚本自动执行请求接口,而后将请求的接口数据保存到后台mysql数据库中。这种方法须要人工天天打开网页进行爬取。因而翻阅资料了解phantomjs能够实现我想要的功能。javascript
正常的网页咱们须要浏览器打开才能访问,可是经过phontomjs的虚拟浏览器环境能够在后端打开一个网页,能够正常的执行js,生成dom。这样就能够在后端打开一个网页,而且使用pm2守护进程,保持网页一直打开,在网页js中设置定时器,天天固定时间出发爬取动做。html
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等监听网页状态的回调函数,能够经过在这些回调函数中埋点,记录时间,就能够用来分析网页的性能。java