當前位置:
首頁 > 知識 > node調用phantomjs-node爬取複雜頁面

node調用phantomjs-node爬取複雜頁面

什麼是phantomjs

phantomjs官網是這麼說的,『整站測試,屏幕捕獲,自動翻頁,網路監控』,目前比較流行用來爬取複雜的,難以通過api或正則匹配的頁面,比如頁面是通過非同步載入。phantomjs就是一個完整的瀏覽器只能沒有界面,因此我們可以用它來模擬真正的瀏覽器去訪問頁面,然後再獲取頁面。我要說的重點是如何在node中調用phantomjs來獲取頁面。

node與phantomjs通信
  1. 命令行傳參 只能在phantomjs開啟時對其傳參,運行過程中無能為力。
  2. 標準輸出 能從phantomjs向node輸出數據,但是沒法反過來。
  3. http phantomjs向node發http請求,然後node返回數據,但是請求只能由phantomjs發出
  4. websocket websocket通訊,能夠雙向通訊但是實現略麻煩。
  5. 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 裝機作業