小編給大家分享一下puppeteer爬蟲的工作原理是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司專注于資陽企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城建設(shè)。資陽網(wǎng)站建設(shè)公司,為資陽等地區(qū)提供建站服務(wù)。全流程按需求定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)爬蟲(puppeteer)是什么?
爬蟲又稱網(wǎng)絡(luò)機(jī)器人。每天或許你都會(huì)使用搜索引擎,爬蟲便是搜索引擎重要的組成部分,爬取內(nèi)容做索引。現(xiàn)如今大數(shù)據(jù),數(shù)據(jù)分析很火,那數(shù)據(jù)哪里來呢,可以通過網(wǎng)絡(luò)爬蟲爬取啊。那我萌就來探討一下網(wǎng)絡(luò)爬蟲吧。
爬蟲的工作原理
如圖所示,這是爬蟲的流程圖,可以看到通過一個(gè)種子URL開啟爬蟲的爬取之旅,通過下載網(wǎng)頁,解析網(wǎng)頁中內(nèi)容存儲(chǔ),同時(shí)解析中網(wǎng)頁中的URL 去除重復(fù)后加入到等待爬取的隊(duì)列。然后從隊(duì)列中取到下一個(gè)等待爬取的URL重復(fù)以上步驟,是不是很簡(jiǎn)單呢?
廣度(BFS)還是深度(DFS)優(yōu)先策略
上面也提到在爬取完一個(gè)網(wǎng)頁后從等待爬取的隊(duì)列中選取一個(gè)URL去爬去,那如何選擇呢?是選擇當(dāng)前爬取網(wǎng)頁中的URL 還是繼續(xù)選取當(dāng)前URL中同級(jí)URL呢?這里的同級(jí)URL是指來自同一個(gè)網(wǎng)頁的URL,這就是爬取策略之分。
廣度優(yōu)先策略(BFS)
廣度優(yōu)先策略便是將當(dāng)前某個(gè)網(wǎng)頁中URL先爬取完全,再去爬取從當(dāng)前網(wǎng)頁中的URL爬取的URL,這就是BFS,如果上圖的關(guān)系圖表示網(wǎng)頁的關(guān)系,那么BFS的爬取策略將會(huì)是:(A->(B,D,F,G)->(C,F));
深度優(yōu)先策略(DFS)
深度優(yōu)先策略爬取某個(gè)網(wǎng)頁,然后繼續(xù)去爬取從網(wǎng)頁中解析出的URL,直到爬取完。
(A->B->C->D->E->F->G)
下載網(wǎng)頁
下載網(wǎng)頁看起來很簡(jiǎn)單,就像在瀏覽器中輸入鏈接一樣,下載完后瀏覽器便能顯示出來。當(dāng)然結(jié)果是并不是這樣的簡(jiǎn)單。
模擬登錄
對(duì)于一些網(wǎng)頁來說需要登錄才能看到網(wǎng)頁中內(nèi)容,那爬蟲怎么登錄呢?其實(shí)登錄的過程就是獲取訪問的憑證(cookie,token...)
let cookie = ''; let j = request.jar() async function login() { if (cookie) { return await Promise.resolve(cookie); } return await new Promise((resolve, reject) => { request.post({ url: 'url', form: { m: 'username', p: 'password', }, jar: j }, function(err, res, body) { if (err) { reject(err); return; } cookie = j.getCookieString('url'); resolve(cookie); }) }) }
這里是個(gè)簡(jiǎn)單的栗子,登錄獲取cookie, 然后每次請(qǐng)求都帶上cookie.
獲取網(wǎng)頁內(nèi)容
有的網(wǎng)頁內(nèi)容是服務(wù)端渲染的,沒有CGI能夠獲得數(shù)據(jù),只能從html中解析內(nèi)容,但是有的網(wǎng)站的內(nèi)容并不是簡(jiǎn)單的便能獲取內(nèi)容,像linkedin這樣的網(wǎng)站并不是簡(jiǎn)單的能夠獲得網(wǎng)頁內(nèi)容,網(wǎng)頁需要通過瀏覽器執(zhí)行后才能獲得最終的html結(jié)構(gòu),那怎么解決呢?前面我萌提到瀏覽器執(zhí)行,那么我萌有沒有可編程的瀏覽器呢?puppeteer,谷歌chrome團(tuán)隊(duì)開源的無頭瀏覽器項(xiàng)目,利用無頭瀏覽器便能模擬用戶訪問,便能獲取最重網(wǎng)頁的內(nèi)容,抓取內(nèi)容。
利用puppeteer 模擬登錄
async function login(username, password) { const browser = await puppeteer.launch(); page = await browser.newPage(); await page.setViewport({ width: 1400, height: 1000 }) await page.goto('https://example.cn/login'); console.log(page.url()) await page.focus('input[type=text]'); await page.type(username, { delay: 100 }); await page.focus('input[type=password]'); await page.type(password, { delay: 100 }); await page.$eval("input[type=submit]", el => el.click()); await page.waitForNavigation(); return page; }
執(zhí)行login()
后便能像在瀏覽器中登錄后,便能像瀏覽器中登錄后便能獲取html中的內(nèi)容,當(dāng)讓w哦萌也可以直接請(qǐng)求CGI
async function crawlData(index, data) { let dataUrl = `https://example.cn/company/contacts?count=20&page=${index}&query=&dist=0&cid=${cinfo.cid}&company=${cinfo.encodename}&forcomp=1&searchTokens=&highlight=false&school=&me=&webcname=&webcid=&jsononly=1`; await page.goto(dataUrl); // ... }
像有的網(wǎng)站,拉鉤,每次爬取的cookie都一樣,也能利用無頭瀏覽器取爬取,這樣每次就不用每次爬取的時(shí)候擔(dān)心cookie.
寫在最后
當(dāng)然爬蟲不僅僅這些,更多的是對(duì)網(wǎng)站進(jìn)行分析,找到合適的爬蟲策略。對(duì)后關(guān)于puppeteer
,不僅僅可以用來做爬蟲,因?yàn)榭梢跃幊蹋瑹o頭瀏覽器,可以用來自動(dòng)化測(cè)試等等。
以上是“puppeteer爬蟲的工作原理是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!
名稱欄目:puppeteer爬蟲的工作原理是什么-創(chuàng)新互聯(lián)
鏈接地址:http://chinadenli.net/article32/dhigpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站內(nèi)鏈、做網(wǎng)站、響應(yīng)式網(wǎng)站、靜態(tài)網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)