node調用phantomjs-node爬取複雜頁面
什麼是phantomjs
phantomjs官網是這麼說的,『整站測試,屏幕捕獲,自動翻頁,網路監控』,目前比較流行用來爬取複雜的,難以通過api或正則匹配的頁面,比如頁面是通過非同步載入。phantomjs就是一個完整的瀏覽器只能沒有界面,因此我們可以用它來模擬真正的瀏覽器去訪問頁面,然後再獲取頁面。我要說的重點是如何在node中調用phantomjs來獲取頁面。
node與phantomjs通信- 命令行傳參 只能在phantomjs開啟時對其傳參,運行過程中無能為力。
- 標準輸出 能從phantomjs向node輸出數據,但是沒法反過來。
- http phantomjs向node發http請求,然後node返回數據,但是請求只能由phantomjs發出
- websocket websocket通訊,能夠雙向通訊但是實現略麻煩。
- phantomjs-node 實際上也是使用websocket或者http通訊,但是畢竟是別人寫好的我們直接用就行,缺點是依賴略龐大。
如何使用phantom-node
這裡只做簡單說明詳細api見github。
1.安裝
npm install phantom
2.模塊封裝(以下代碼基於es7,需支持async/await,node版本>7.0),更詳細使用可查看phantomjs官方文檔
1 "use strict"
2
3 const phantom = require("phantom");
4
5 let getPic = async ( name ) => {
6 //url路徑
7 let url = "http:///"+name;
8 //創建一個實例
9 const instance = await phantom.create;
10 //創建一個頁面
11 const page = await instance.createPage;
12 //設置頁面參數
13 await page.property( "viewportSize" , { width : 1800 , height : 1200 } );
14 //打開url,返回狀態(url有轉碼,解決中文問題)
15 const status = await page.open( encodeURI( url ) );
16 console.log( status );
17 //延時等待頁面js執行完成(phantomjs只是等待頁面上全部資源載入完畢,不包含頁面js執行時間,所以需延時一段時間等待js)
18 await lateTime( 500 );
19 //輸出頁面到當前目錄下
20 await page.render(`${ name }--${Date.now}.png`);
21 //銷毀實例
22 await instance.exit;
23 //返回數據
24 return "xxx";
25 };
26
27 let lateTime = ( time ) =>{
28 return new Promise( function(resolve,reject){
29 setTimeout(function{
30 resolve;
31 }, time );
32 } );
33 }
34 //暴露介面
35 module.exports = getPic ;


※SQL Server Alwayson創建代理作業注意事項
※Bean 的生命周期 之 後處理Bean
TAG:達人科技 |
※nodejs+mongodb 編寫 restful 風格博客 api
※node+express+mongoDB寫簡單介面,Vue獲取介面
※node整合webstorm
※blogfoster-scripts:一款簡化 Node.js 項目初始化的工具
※nodejs連接mongodb,對數據增刪改查操作(跳過坑)Windows版
※基於 node.js 的自動路由組件-HttpPostman
※川崎病:小兒皮膚黏膜淋巴結綜合征(mucocutaneous lymph node syndrome,MCLS)
※log4js-node配置
※Node.js之express框架
※node+pm2+express+mysql+sequelize來搭建網站和寫介面
※詳解node + mongoDb(mongoDb安裝、運行,在node中連接增刪改查)
※Shader Graph著色器視圖自定義節點API:Code Function Node
※NodePort,LoadBalancer還是Ingress?我該如何選擇
※DOM探索之-DOM的nodeType、nodeName、nodeValue
※搭建nginx+nodejs伺服器
※使用node.js的開發框架express創建一個web應用
※Google發布Knative,IBM發布雲原生Node.js應用的資源
※「NodeSpace Powered by Explorium」全國首家智慧供應鏈加速空間落地利程坊
※RPM命令的——nodeps 和——force參數解釋
※至薄簡約の小鋼炮,Fractal Design Node 202 Slim 裝機作業