NodeJS的url截取模塊url-extract的使用實(shí)例
上次介紹了怎么利用NodeJS + PhantomJS進(jìn)行截圖,但由于對每次截圖操作,都啟用了一個(gè)PhantomJS進(jìn)程,所以并發(fā)量上去后,效率堪憂,所以我們重寫了所有代碼,并將其獨(dú)立成為一個(gè)模塊,方便調(diào)用。
如何改進(jìn)?控制線程數(shù),以及單線程處理url數(shù)量。使用Standard Output & WebSocket 進(jìn)行通訊。添加緩存機(jī)制,目前使用Javascript Object進(jìn)行。對外提供簡易的接口。
設(shè)計(jì)圖
依賴 & 安裝
由于PhantomJS 1.9.0+才開始支持Websocket,所以我們先要確定在PATH中的PhantomJS是為1.9.0以上版本。在命令行鍵入:
$ phantomjs -v
如果能返回版本號1.9.x,則可以繼續(xù)操作。如果版本過低,或者出現(xiàn)錯(cuò)誤,請到PhantomJS官網(wǎng)下載最新版本。
如果你已經(jīng)安裝了Git,或者擁有Git Shell,那么在命令行鍵入:
$ npm install url-extract
進(jìn)行安裝。
一個(gè)簡單的例子
比如我們要截取百度首頁,那么可以這樣:
下面是打印:
其中,image屬性就是截圖相對于工作路徑的地址。我們可以使用Job的getData接口來得到更清楚的數(shù)據(jù),例如:
打印就變成了這樣了:
image表示截圖相對于工作路徑的地址,status表示狀態(tài)是否正常,true代表正常,false代表截圖失敗。
更多例子請參見:https://github.com/miniflycn/url-extract/tree/master/examples
主要API
.snapshot
url快照
.snapshot(url, [callback]).snapshot(urls, [callback]).snapshot(url, [option]).snapshot(urls, [option])復(fù)制代碼 代碼如下:url {String} 要截取的地址 urls {Array} 要截取的地址數(shù)組 callback {Function} 回調(diào)函數(shù) option {Object} 可選參數(shù) ┝ id {String} 自定義url的id,如果第一個(gè)參數(shù)是urls,此參數(shù)無效 ┝ image {String} 自定義截圖的保存地址,如果第一個(gè)參數(shù)是urls,此參數(shù)無效 ┝ groupId {String} 定義一組url的groupId,用于返回時(shí)候辨認(rèn)是哪一組url ┝ ignoreCache {Boolean} 是否忽略緩存 ┗ callback {Function} 回調(diào)函數(shù).extract
url信息抓取,并獲取快照
.extract(url, [callback]).extract(urls, [callback]).extract(url, [option]).extract(urls, [option])url {String} 要截取的地址
urls {Array} 要截取的地址數(shù)組
callback {Function} 回調(diào)函數(shù)
option {Object} 可選參數(shù)
┝ id {String} 自定義url的id,如果第一個(gè)參數(shù)是urls,此參數(shù)無效
┝ image {String} 自定義截圖的保存地址,如果第一個(gè)參數(shù)是urls,此參數(shù)無效
┝ groupId {String} 定義一組url的groupId,用于返回時(shí)候辨認(rèn)是哪一組url
┝ ignoreCache {Boolean} 是否忽略緩存
┗ callback {Function} 回調(diào)函數(shù)
Job(類)
每一個(gè)url對應(yīng)一個(gè)job對象,url的相關(guān)信息由job對象存儲(chǔ)。
Field
url {String} 鏈接地址content {Boolean} 是否抓取頁面的title和description信息id {String} job的idgroupId {String} 一堆job的組idcache {Boolean} 是否開啟緩存callback {Function} 回調(diào)函數(shù)image {String} 圖片地址status {Boolean} job當(dāng)前是否正常Prototype
getData() 獲取job的相關(guān)數(shù)據(jù)全局配置
url-extract根目錄中的config文件可以進(jìn)行全局配置,默認(rèn)如下:
module.exports = { wsPort: 3001, maxJob: 100, maxQueueJob: 400, cache: 'object', maxCache: 10000, workerNum: 0};wsPort {Number} websocket占用的端口地址maxJob {Number} 每個(gè)PhantomJS線程可并發(fā)worker數(shù)maxQueueJob {Number} 最大等待工作數(shù)量,0表示不限制,超過該數(shù)量,任何工作都直接返回失?。磗tatus = false)cache {String} 緩存實(shí)現(xiàn),目前只有object實(shí)現(xiàn)maxCache {Number} 最大緩存鏈接數(shù)workerNum {Number} PhantomJS線程數(shù),0表示和CPU數(shù)量相同一個(gè)簡單的服務(wù)例子
https://github.com/miniflycn/url-extract-server-example
注意,需要安裝connect和url-extract:
$ npm install
如果你下載了網(wǎng)盤的文件,那么請安裝connect:
$ npm install connect
然后鍵入:
$ node bin/server
打開:
查看效果。
;
相關(guān)文章
js基礎(chǔ)知識(公有方法、私有方法、特權(quán)方法)
這篇文章主要介紹了js基礎(chǔ)知識,包括公有方法、私有方法,以及特權(quán)方法的使用介紹,感興趣的小伙伴們可以參考一下2015-11-11JS限制上傳圖片大小不使用控件在本地實(shí)現(xiàn)
文件上傳之前的檢測,通常是通過文件名來判斷文件類型是否合法,但是要想檢測文件的大小很難辦到,除非在本地或者使用控件。使用JS可以輕松解決詞問題,本文詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12javascript學(xué)習(xí)筆記(十六) 系統(tǒng)對話框(alert、confirm、prompt)
javascript學(xué)習(xí)筆記之系統(tǒng)對話框(alert、confirm、prompt)使用介紹,學(xué)習(xí)js的朋友可以參考下2012-06-06jQuery中文入門指南,翻譯加實(shí)例,jQuery的起點(diǎn)教程
jQuery中文入門指南,翻譯加實(shí)例,jQuery的起點(diǎn)教程...2007-02-02Javascript基礎(chǔ)_簡單比較undefined和null 值
下面小編就為大家?guī)硪黄狫avascript基礎(chǔ)_簡單比較undefined和null 值。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06