golang解析網頁,可以做爬蟲了
> java 裡用 Jsoup,nodejs 裡用 cheerio,都可以相當方便的解析網頁,在 golang 語言裡也找到了一個網頁解析的利器,相當的好用,選擇器跟 jQuery 一樣
安裝
go get github.com/PuerkitoBio/goquery
使用
其實就是專案的readme.md
裡的 demo
package main
import (
"fmt"
"log"
"github.com/PuerkitoBio/goquery"
)
func ExampleScrape() {
doc, err := goquery.NewDocument("http://metalsucks.net")
if err != nil {
log.Fatal(err)
}
// Find the review items
doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) {
// For each item found, get the band and title
band := s.Find("a").Text()
title := s.Find("i").Text()
fmt.Printf("Review %d: %s - %s\n", i, band, title)
})
}
func main() {
ExampleScrape()
}
亂碼問題
中文網頁都會有亂碼問題,因為它預設是 utf8 編碼,這時候就要用到轉碼器了
安裝 iconv-go
go get github.com/djimenez/iconv-go
使用方法
func ExampleScrape() {
res, err := http.Get(baseUrl)
if err != nil {
fmt.Println(err.Error())
} else {
defer res.Body.Close()
utfBody, err := iconv.NewReader(res.Body, "gb2312", "utf-8")
if err != nil {
fmt.Println(err.Error())
} else {
doc, err := goquery.NewDocumentFromReader(utfBody)
// 下面就可以用doc去獲取網頁裡的結構資料了
// 比如
doc.Find("li").Each(func(i int, s *goquery.Selection) {
fmt.Println(i, s.Text())
})
}
}
}
進階
有些網站會設定 Cookie, Referer 等驗證,可以在 http 發請求之前設定上請求的頭資訊
這個不屬於 goquery 裡的東西了,想了解更多可以檢視 golang 裡的 net/http
包下的方法等資訊
baseUrl:="http://baidu.com"
client:=&http.Client{}
req, err := http.NewRequest("GET", baseUrl, nil)
req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
req.Header.Add("Referer", baseUrl)
req.Header.Add("Cookie", "your cookie") // 也可以通過req.Cookie()的方式來設定cookie
res, err := client.Do(req)
defer res.Body.Close()
//最後直接把res傳給goquery就可以來解析網頁了
doc, err := goquery.NewDocumentFromResponse(res)
參考
- https://github.com/PuerkitoBio/goquery
- https://github.com/PuerkitoBio/goquery/issues/185
- https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks#handle-non-utf8-html-pages
可以愉快的爬人家的網站了
原文:https://tomoya92.github.io/2017/06/21/golang-goquery/
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 爬蟲——網頁爬取方法和網頁解析方法爬蟲網頁
- 《網頁爬蟲》網頁爬蟲
- Python爬蟲可以做什麼?Python爬蟲
- 爬蟲(6) - 網頁資料解析(2) | BeautifulSoup4在爬蟲中的使用爬蟲網頁
- Python 爬蟲網頁解析工具lxml.html(二)Python爬蟲網頁XMLHTML
- Python 爬蟲網頁解析工具lxml.html(一)Python爬蟲網頁XMLHTML
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- Golang 網路爬蟲框架gocolly/collyGolang爬蟲框架
- Python網路爬蟲之爬取淘寶網頁頁面 MOOC可以執行的程式碼Python爬蟲網頁
- Golang福利爬蟲Golang爬蟲
- wget 網頁爬蟲,網頁抓取工具wget網頁爬蟲
- node:爬蟲爬取網頁圖片爬蟲網頁
- 爬蟲 | 基本步驟和解析網頁的幾種方法爬蟲網頁
- 網頁爬蟲--未完成網頁爬蟲
- python 爬蟲網頁登陸Python爬蟲網頁
- 爬蟲抓取網頁資料原理爬蟲網頁
- python爬取換頁_爬蟲爬不進下一頁了,怎麼辦Python爬蟲
- [網路爬蟲] Jsoup : HTML 解析工具爬蟲JSHTML
- Golang框架beego電影網爬蟲小試牛刀Golang框架爬蟲
- 【爬蟲】網頁抓包工具--Fiddler爬蟲網頁
- 爬蟲抓取網頁的詳細流程爬蟲網頁
- Python爬蟲之網頁圖片Python爬蟲網頁
- 用LoadRunner做一個網路爬蟲爬蟲
- Golang爬蟲+正規表示式Golang爬蟲
- Java爬蟲翻頁Java爬蟲
- 一起學爬蟲——使用Beautiful Soup爬取網頁爬蟲網頁
- Node JS爬蟲:爬取瀑布流網頁高清圖JS爬蟲網頁
- 3 行寫爬蟲 - 使用 Goribot 快速構建 Golang 爬蟲爬蟲Golang
- Python爬蟲使用代理proxy抓取網頁Python爬蟲網頁
- Golang 官網現在可以直接訪問了Golang
- 不會Python爬蟲?教你一個通用爬蟲思路輕鬆爬取網頁資料Python爬蟲網頁
- 爬蟲:HTTP請求與HTML解析(爬取某乎網站)爬蟲HTTPHTML網站
- 手把手教你利用爬蟲爬網頁(Python程式碼)爬蟲網頁Python
- 最近要寫爬蟲,大家有推薦 Golang 的爬蟲框架嗎?爬蟲Golang框架
- 用Golang寫爬蟲(六) - 使用collyGolang爬蟲
- 『No20: Golang 爬蟲上手指南』Golang爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- python爬蟲:使用BeautifulSoup修改網頁內容Python爬蟲網頁