您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么使用superagent、eventproxy與cheerio實現簡單爬蟲,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
說起Node.js,可能最突出的特點就是它的異步特性。
這里教大家用Node.js完成一個簡單的爬蟲:爬取CNode社區首頁的所有帖子標題和鏈接。
Node.js需要使用到三個包:express,superagent,cheerio。
express:Node.js應用最廣泛的web框架
superagent:http相關的庫,可以發起get或post請求。
cheerio:可以用來從網頁中以css選擇器方式取得數據。其實可以理解為是Node.js版本的JQuery.
首先,新建一個空文件夾creeper。打開vs code終端。(vs code基本安裝及配置文章鏈接)。在vs code終端進入creeper文件夾。
可以看到,我已經成功創建了creeper文件夾并成功進入。首先在終端使用npm init命令初始化項目
然后使用npm install命令安裝express,superagent,cheerio三個依賴。
首先,在app.js文件頂部導入我們剛才所依賴的三個包
到這里項目基本配置完成了,下一步就是寫簡單爬蟲的邏輯代碼了
其實實現簡單爬蟲代碼就只需要簡單的30行代碼。在頂部導入我們依賴的包,底部監聽爬蟲程序運行于5000端口。中間實現爬蟲的邏輯處理。通過app.get定義一個get請求的接口,接口名稱/,表示訪問根路徑,也就是我們測試只需要使用get請求訪問http://127.0.0.1:5000就可以訪問到我們寫的簡單爬蟲,使用superagent像CNode社區首頁發起一個get請求,請求成功返回的result中的text存儲著CNode網頁的內容。然后使用cheerio.load去讀取網頁內容,然后通過forEach循環逐條去除帖子標題和鏈接。然后給客戶端返回所有取到的帖子標題和鏈接。這個小爬蟲就完成了。我們可以測試下接口能不能正常運行。
可以清楚看到,我們成功爬取到CNode社區首頁的所有帖子標題以及鏈接。并且以json格式返回給客戶端。
到這里結束了么?當然沒有!別忘了我們這篇文章最重要的是要學習Node.js的異步特性,我們剛才使用superagent和cheerio來爬取首頁帖子標題與鏈接,只需要通過superagent發起一次get請求就可以做到了。如果我們想同時取出每個帖子的第一條評論,這時我們就得對上一步取到的每個帖子的鏈接發起請求,然后依舊使用cheerio去取出第一條評論。Cnode社區首頁有四十個帖子,按照邏輯就需要先發起一次請求取到所有的帖子標題和鏈接,然后對每一個鏈接在此發起請求,去獲得對應的第一條評論。所以我們需要發起41次請求,這就涉及到Node.js的異步特性了。對Node.js比較熟悉的可能會知道使用promise或者generator來解決回調。不過我工作中還是偏向于喜歡直接callback。使用callback進行異步請求,一般有eventproxy或者async兩種選擇。
eventproxy與async的區別
其實eventproxy與async都是用來做異步流程控制的。如果你爬取的請求小于10次的時候,你可以選擇用eventproxy,如果你爬取的請求成百上千的話,那就需要考慮使用async,因為你一次性發起成百上千次請求,原網站可能會認為你是在惡意請求,直接把你訪問ip封掉。這時候就可以使用async控制并發請求數量,一次五到十條,慢慢爬取完所有數據。
在這里我選擇eventproxy進行異步爬取數據。使用eventproxy需要依賴eventproxy包,所以,首先npm install導入eventproxy依賴。
先把調整好的代碼邏輯貼出來:
我們來理下新的邏輯的思路:
首先,在頂部導入我們所需要依賴的包。
superagent.get其實就是之前的操作獲得首頁所有帖子的鏈接,但是剛才我們截圖可以看到,我們爬取到的鏈接都是topic/5bd4772a14e994202cd5bdb7類似這種格式,這很明顯不是可訪問的鏈接,所以前面要拼接CNode的主鏈接形成帖子真正可訪問的鏈接
接著,得到一個eventproxy實例
然后我們要發起40次請求就需要用到eventproxy的after方法,after
方法適合重復的操作,比如讀取10個文件,調用5次數據庫等。將handler注冊到N次相同事件的觸發上。達到指定的觸發數,handler將會被調用執行,每次觸發的數據,將會按觸發順序,存為數組作為參數傳入。
最下方使用一個forEach循環,在循環里通過superagent發起get請求輪流請求帖子鏈接取得帖子實際內容。然后通過eventproxy的emit方法告訴ep實例我本次請求結束了。當40次請求全部結束后eq.after就會執行回調把取到的數據返回客戶端。到這里40次并發請求爬取數據成功執行。接下來我們來看看運行效果吧
可以看到成功取到CNode社區首頁帖子標題鏈接,并且通過并發請求取得每一條帖子的第一條評論。當然,這種爬取方式對于超過十次請求的一定要慎用,因為一些大網站會認為你是惡意請求直接封禁你ip,這樣就得不償失了。這樣情況下就可以考慮使用async控制并發數慢慢進行爬取數據。
以上就是怎么使用superagent、eventproxy與cheerio實現簡單爬蟲,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。