最近想寫一個程序爬網頁接口的數據,因爲本人是前端開發者,對於後端的一些爬蟲工具不甚瞭解。首先所爬接口須要動態的在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