真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

創(chuàng)新互聯(lián)服務(wù)項目包括進賢網(wǎng)站建設(shè)、進賢網(wǎng)站制作、進賢網(wǎng)頁制作以及進賢網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,進賢網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到進賢省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

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

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

express:Node.js應(yīng)用最廣泛的web框架

superagent:http相關(guān)的庫,可以發(fā)起getpost請求。

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

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

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

eventproxy與async的區(qū)別

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

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

先把調(diào)整好的代碼邏輯貼出來:

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

首先,在頂部導(dǎo)入我們所需要依賴的包。

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

接著,得到一個eventproxy實例

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲

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

以上就是怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站欄目:怎么使用superagent、eventproxy與cheerio實現(xiàn)簡單爬蟲
轉(zhuǎn)載注明:http://weahome.cn/article/goocos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部