中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

發布時間:2021-11-09 18:23:47 來源:億速云 閱讀:298 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關怎么使用superagent、eventproxy與cheerio實現簡單爬蟲,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

說起Node.js,可能最突出的特點就是它的異步特性。

這里教大家用Node.js完成一個簡單的爬蟲:爬取CNode社區首頁的所有帖子標題和鏈接。

Node.js需要使用到三個包:express,superagent,cheerio。

express:Node.js應用最廣泛的web框架

superagent:http相關的庫,可以發起getpost請求。

cheerio:可以用來從網頁中以css選擇器方式取得數據。其實可以理解為是Node.js版本的JQuery.

首先,新建一個空文件夾creeper。打開vs code終端。(vs code基本安裝及配置文章鏈接)。在vs code終端進入creeper文件夾。

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

可以看到,我已經成功創建了creeper文件夾并成功進入。首先在終端使用npm init命令初始化項目

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

然后使用npm install命令安裝express,superagent,cheerio三個依賴。

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

首先,在app.js文件頂部導入我們剛才所依賴的三個包

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

到這里項目基本配置完成了,下一步就是寫簡單爬蟲的邏輯代碼了

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

其實實現簡單爬蟲代碼就只需要簡單的30行代碼。在頂部導入我們依賴的包,底部監聽爬蟲程序運行于5000端口。中間實現爬蟲的邏輯處理。通過app.get定義一個get請求的接口,接口名稱/,表示訪問根路徑,也就是我們測試只需要使用get請求訪問http://127.0.0.1:5000就可以訪問到我們寫的簡單爬蟲,使用superagentCNode社區首頁發起一個get請求,請求成功返回的result中的text存儲著CNode網頁的內容。然后使用cheerio.load去讀取網頁內容,然后通過forEach循環逐條去除帖子標題和鏈接。然后給客戶端返回所有取到的帖子標題和鏈接。這個小爬蟲就完成了。我們可以測試下接口能不能正常運行。

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

可以清楚看到,我們成功爬取到CNode社區首頁的所有帖子標題以及鏈接。并且以json格式返回給客戶端。

到這里結束了么?當然沒有!別忘了我們這篇文章最重要的是要學習Node.js的異步特性,我們剛才使用superagentcheerio來爬取首頁帖子標題與鏈接,只需要通過superagent發起一次get請求就可以做到了。如果我們想同時取出每個帖子的第一條評論,這時我們就得對上一步取到的每個帖子的鏈接發起請求,然后依舊使用cheerio去取出第一條評論。Cnode社區首頁有四十個帖子,按照邏輯就需要先發起一次請求取到所有的帖子標題和鏈接,然后對每一個鏈接在此發起請求,去獲得對應的第一條評論。所以我們需要發起41次請求,這就涉及到Node.js的異步特性了。對Node.js比較熟悉的可能會知道使用promise或者generator來解決回調。不過我工作中還是偏向于喜歡直接callback。使用callback進行異步請求,一般有eventproxy或者async兩種選擇。

eventproxy與async的區別

其實eventproxyasync都是用來做異步流程控制的。如果你爬取的請求小于10次的時候,你可以選擇用eventproxy,如果你爬取的請求成百上千的話,那就需要考慮使用async,因為你一次性發起成百上千次請求,原網站可能會認為你是在惡意請求,直接把你訪問ip封掉。這時候就可以使用async控制并發請求數量,一次五到十條,慢慢爬取完所有數據。

在這里我選擇eventproxy進行異步爬取數據。使用eventproxy需要依賴eventproxy包,所以,首先npm install導入eventproxy依賴。

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

先把調整好的代碼邏輯貼出來:

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

我們來理下新的邏輯的思路:

首先,在頂部導入我們所需要依賴的包。

superagent.get其實就是之前的操作獲得首頁所有帖子的鏈接,但是剛才我們截圖可以看到,我們爬取到的鏈接都是topic/5bd4772a14e994202cd5bdb7類似這種格式,這很明顯不是可訪問的鏈接,所以前面要拼接CNode的主鏈接形成帖子真正可訪問的鏈接

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

接著,得到一個eventproxy實例

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

然后我們要發起40次請求就需要用到eventproxyafter方法,after方法適合重復的操作,比如讀取10個文件,調用5次數據庫等。將handler注冊到N次相同事件的觸發上。達到指定的觸發數,handler將會被調用執行,每次觸發的數據,將會按觸發順序,存為數組作為參數傳入。

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

最下方使用一個forEach循環,在循環里通過superagent發起get請求輪流請求帖子鏈接取得帖子實際內容。然后通過eventproxyemit方法告訴ep實例我本次請求結束了。當40次請求全部結束后eq.after就會執行回調把取到的數據返回客戶端。到這里40次并發請求爬取數據成功執行。接下來我們來看看運行效果吧

怎么使用superagent、eventproxy與cheerio實現簡單爬蟲

可以看到成功取到CNode社區首頁帖子標題鏈接,并且通過并發請求取得每一條帖子的第一條評論。當然,這種爬取方式對于超過十次請求的一定要慎用,因為一些大網站會認為你是惡意請求直接封禁你ip,這樣就得不償失了。這樣情況下就可以考慮使用async控制并發數慢慢進行爬取數據。

以上就是怎么使用superagent、eventproxy與cheerio實現簡單爬蟲,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

同德县| 天台县| 五华县| 塔城市| 沙坪坝区| 阿尔山市| 涿州市| 昭平县| 瑞安市| 田阳县| 图木舒克市| 巴彦淖尔市| 怀来县| 南京市| 崇义县| 扶沟县| 定边县| 梅河口市| 高唐县| 四会市| 富宁县| 博野县| 井陉县| 运城市| 华宁县| 桐柏县| 甘南县| 星座| 兴仁县| 资阳市| 宿州市| 太谷县| 孝感市| 通化县| 河池市| 河北区| 来凤县| 高台县| 阜南县| 蓝山县| 定州市|