您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何進(jìn)行chrome中的動(dòng)態(tài)爬蟲(chóng)分析以及環(huán)境搭建,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
一:概述
動(dòng)態(tài)爬蟲(chóng)和靜態(tài)爬蟲(chóng),n多年前web網(wǎng)站都是響應(yīng)靜態(tài)的html頁(yè)面,也就是我們發(fā)生http請(qǐng)求到服務(wù)端,完后讀取響應(yīng)就可以獲取到我們要的數(shù)據(jù),但是隨著web的發(fā)展,各種前端框架層出不群,之前的爬蟲(chóng)方案已經(jīng)完全不適用,抓到的頁(yè)面有可能是下面這個(gè)樣子,如圖:
這種情況就需要我們能動(dòng)態(tài)去執(zhí)行頁(yè)面上的js,拿到最終的html。
動(dòng)態(tài)渲染肯定離不開(kāi)瀏覽器(除非自己去解析html,css,js),google開(kāi)源了chromium瀏覽器,我們有自定義的需求可以更改它的源代碼來(lái)實(shí)現(xiàn),同時(shí)我們要和瀏覽器交互需要一個(gè)協(xié)議,google也把這個(gè)協(xié)議開(kāi)源出來(lái)了,Chrome DevTools Protocol有了這個(gè)協(xié)議我們就可以去和瀏覽器打交道了。最后就是選擇一門(mén)趁手的編程語(yǔ)言,由于是學(xué)習(xí)的原因,所以來(lái)個(gè)google全家桶吧,選擇golang作為開(kāi)發(fā)語(yǔ)言。開(kāi)發(fā)庫(kù)選擇幾乎是標(biāo)配的chromedp,萬(wàn)事具備,最后再提一下 headless 是個(gè)啥,就是chrome的一種運(yùn)行模式,我們平時(shí)都是需要有界面的使用,但是當(dāng)爬蟲(chóng)使用的時(shí)候就不需要界面了,開(kāi)發(fā)過(guò)程中也可以跑在非headless模式下,方便查看瀏覽器在干什么。
附:
cdp: https://chromedevtools.github.io/devtools-protocol/
chromium: https://www.chromium.org/
chromedp: https://github.com/chromedp/chromedp
二:開(kāi)發(fā)環(huán)境
安裝瀏覽器略過(guò),安裝完之后確保路徑里能找到chrome,我的mac下 .zshrc 加入如下幾行:
# chromealias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary"alias chromium="/Applications/Chromium.app/Contents/MacOS/Chromium"
完后命令行執(zhí)行,能看到版本信息就證明ok了
λ ~/ chrome --versionGoogle Chrome 84.0.4147.89
創(chuàng)建一個(gè)golang的項(xiàng)目(go mod),如下:
附上我的go.mod的依賴(lài)(大部分庫(kù)是使用起來(lái)方便,比如讀取配置文件的,命令行的,根據(jù)個(gè)人愛(ài)好來(lái)就行)
module github.com/anyeshe/caterpillargo 1.14require ( github.com/chromedp/cdproto v0.0.0-20200709115526-d1f6fc58448b github.com/chromedp/chromedp v0.5.3 github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-playground/universal-translator v0.17.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.0.3 // indirect github.com/leodido/go-urn v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/mapstructure v1.3.2 // indirect github.com/panjf2000/ants/v2 v2.4.1 // indirect github.com/pelletier/go-toml v1.8.0 // indirect github.com/spf13/afero v1.3.2 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cobra v1.0.0 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.0 go.uber.org/zap v1.15.0 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect golang.org/x/text v0.3.3 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 gopkg.in/ini.v1 v1.57.0 // indirect)
到現(xiàn)在準(zhǔn)備的步驟就基本做完了,接下來(lái)該熟悉一下庫(kù)和cdp了。
三:chrome開(kāi)啟協(xié)議監(jiān)控
可以窗口可以查看開(kāi)發(fā)者工具和chrome的交互過(guò)程,方便我們參考學(xué)習(xí),打開(kāi)方式如下:
首先打開(kāi)chrome的開(kāi)發(fā)者工具,如下:
完后點(diǎn)擊這個(gè)設(shè)置,到下面的頁(yè)面
勾選協(xié)議監(jiān)控,完后再console中,記得顯示一下 console drawer,如下
完后勾選下面的協(xié)議監(jiān)控就能看見(jiàn)了
注:開(kāi)發(fā)者工具其實(shí)就是基于cdp協(xié)議開(kāi)發(fā)的
Method方法里面的東西對(duì)應(yīng)的就是cdp協(xié)議官網(wǎng)里面的domain,如下:
看完上述內(nèi)容,你們對(duì)如何進(jìn)行chrome中的動(dòng)態(tài)爬蟲(chóng)分析以及環(huán)境搭建有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。