PhantomJS初探

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

相關文章
相關標籤/搜索