使用goquery實現對網頁資訊的爬取

2021-10-24 11:18:24 字數 2027 閱讀 2020

由於業務需要,需對指定網頁的相應資訊進行抓取,之前有試著通過python進行過爬蟲相關業務的開發,但此次需要採用go語言進行開發。本次通過goquery對獲取的頁面資訊進行html解析,現將此次開發做一簡單記錄。

goquery:是乙個供go語言使用的html解析庫,在用go進行爬蟲專案的開發中常用的乙個庫,其提供有較多的選擇器方便我們對html進行選擇與匹配。類似於jquery,是jquery的go版本實現。

本次採用go mod 進行包管理

獲取html的document物件。

dom,err:=goquery.

newdocumentfromreader

(resp.body)

選擇器

說明find(「div")

獲取div元素的物件

find(「#name")

獲取id為name的物件

find(「.name")

獲取class為name的物件……

迴圈遍歷節點:each(f func(int, *selection)) *selection

獲取節點元素文字:dom.text()

獲取,移除,設定節點屬性的值:attr(), removeattr(), setattr()

獲取節點元素長度:length()

each

(func

(i int

, selection *goquery.selection)

還有很多選擇器可以到飛雪無情的部落格去進行了解。

//獲取html的document

dom,err:=goquery.

newdocumentfromreader

(resp.body)

if err!=

nil dom.

find

(".bd").

find

(".news-list").

find

("li").

each

(func

(i int

, selection *goquery.selection)

)defer resp.body.

close()

}在我們對網頁進行解析爬取時,由於go語言只支援utf8,但大部分網頁都採用gbk編碼,因此很容易會出現編碼問題導致獲取的資訊出現亂碼。因此在進行頁面解析時需要特別注意編碼問題。

我們在要進行頁面爬取解析時需要關注該頁面的head中的charset編碼:

本次採用iconv 庫進行編碼的轉換,可以解決亂碼問題:

func convert(input byte, output byte, fromencoding string, toencoding string) (bytesread int, byteswritten int, err error)

input:為解析出來的原文本的位元組陣列

output :為編譯碼完成後輸出出來的位元組陣列,對其進行string化即可

fromencoding :為頁面原本的編碼

toencoding :為需要轉換後的編碼

本文參考 飛雪無痕 的 《golang goquery selector(選擇器) 示例大全》

飛雪無情的部落格

本文為程式設計小白自學問題歸納,如有錯誤與不足敬請指正!

微信網頁掃碼登入的實現

public function weixindenglu public function codeinfo else else insert user db table users insert data user id db table users where username infoarray...

微信網頁掃碼登入的實現

文件1 redirect uri urlencode redirect uri 該 需要url編碼 scope snsapi login response type code scope scope.state state wechat redirect 請求返回的結果 實際上是個html的字串 r...

微信網頁掃碼登入的實現

redirect uri urlencode redirect uri 該 需要url編碼 請求返回的結果 實際上是個html的字串 result file get contents url result str replace connect qrcode result return result...