最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang解析網(wǎng)頁利器goquery的使用方法

 更新時間:2017年09月30日 09:22:51   作者:Tomoya  
這篇文章主要給大家介紹了關(guān)于golang解析網(wǎng)頁利器goquery的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

本文主要給大家介紹了關(guān)于golang解析網(wǎng)頁利器goquery使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

java里用Jsoup,nodejs里用cheerio,都可以相當(dāng)方便的解析網(wǎng)頁,在golang語言里也找到了一個網(wǎng)頁解析的利器,相當(dāng)?shù)暮糜茫x擇器跟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()
}

亂碼問題

中文網(wǎng)頁都會有亂碼問題,因為它默認(rèn)是utf8編碼,這時候就要用到轉(zhuǎn)碼器了

安裝 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去獲取網(wǎng)頁里的結(jié)構(gòu)數(shù)據(jù)了
  // 比如
  doc.Find("li").Each(func(i int, s *goquery.Selection) {
  fmt.Println(i, s.Text())
  })
 }
 }
}

進(jìn)階

有些網(wǎng)站會設(shè)置Cookie, Referer等驗證,可以在http發(fā)請求之前設(shè)置上請求的頭信息

這個不屬于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()的方式來設(shè)置cookie
res, err := client.Do(req)
defer res.Body.Close()
//最后直接把res傳給goquery就可以來解析網(wǎng)頁了
doc, err := goquery.NewDocumentFromResponse(res)

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考

  • 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

相關(guān)文章

  • OpenTelemetry-go的SDK使用方法詳解

    OpenTelemetry-go的SDK使用方法詳解

    這篇文章主要介紹了OpenTelemetry-go的SDK使用方法,OpenTelemetry幫我們實現(xiàn)了相應(yīng)語言的SDK,所以我們只需要進(jìn)行調(diào)用即可,本文根據(jù)官方文檔實例講解,需要的朋友可以參考下
    2022-09-09
  • Go設(shè)計模式之訪問者模式講解和代碼示例

    Go設(shè)計模式之訪問者模式講解和代碼示例

    訪問者是一種行為設(shè)計模式, 允許你在不修改已有代碼的情況下向已有類層次結(jié)構(gòu)中增加新的行為,本文將通過代碼示例給大家詳細(xì)的介紹一下Go設(shè)計模式之訪問者模式,需要的朋友可以參考下
    2023-08-08
  • 簡單講解Go程序中使用MySQL的方法

    簡單講解Go程序中使用MySQL的方法

    這篇文章主要介紹了Go程序中使用MySQL的方法,需要使用第三方包來進(jìn)行連接,需要的朋友可以參考下
    2015-10-10
  • 詳解Golang中interface接口的原理和使用技巧

    詳解Golang中interface接口的原理和使用技巧

    interface?接口在?Go?語言里面的地位非常重要,是一個非常重要的數(shù)據(jù)結(jié)構(gòu)。本文主要介紹了Golang中interface接口的原理和使用技巧,希望對大家有所幫助
    2022-11-11
  • 詳解Golang如何比較兩個slice是否相等

    詳解Golang如何比較兩個slice是否相等

    開發(fā)中常會遇到需要比較兩個slice包含的元素是否完全相等的情況,我們通常會通過兩種方法去比較切片是否相等。這里通過幾個示例來看一下這兩種方法,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-11-11
  • Go語言中的并發(fā)模式你了解了嗎

    Go語言中的并發(fā)模式你了解了嗎

    工作中查看項目代碼,發(fā)現(xiàn)會存在使用?GO?語言做并發(fā)的時候出現(xiàn)各種各樣的異常情況,實際上,出現(xiàn)上述的情況,還是因為我們對于?GO?語言的并發(fā)模型和涉及的?GO?語言基礎(chǔ)不夠扎實,所以本文小編就來帶大家深入了解下Go語言中的并發(fā)模式吧
    2023-08-08
  • 一文帶你了解Go語言中time包的時間常用操作

    一文帶你了解Go語言中time包的時間常用操作

    在日常開發(fā)中,我們避免不了時間的使用,我們可能需要獲取當(dāng)前時間,然后格式化保存,也可能需要在時間類型與字符串類型之間相互轉(zhuǎn)換等。本文將會對?Go?time?包里面的常用函數(shù)和方法進(jìn)行介紹,需要的可以參考一下
    2022-12-12
  • golang bufio包中Write方法的深入講解

    golang bufio包中Write方法的深入講解

    這篇文章主要給大家介紹了關(guān)于golang bufio包中Write方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 一文探索Go中的函數(shù)使用方式

    一文探索Go中的函數(shù)使用方式

    在編程中,函數(shù)是基本構(gòu)建塊之一,Go語言以其簡潔明了的函數(shù)定義和調(diào)用語法而聞名,所以本文就來和大家聊聊Go中的函數(shù)概念及使用,感興趣的可以了解下
    2023-09-09
  • Golang依賴注入工具digo的使用詳解

    Golang依賴注入工具digo的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中依賴注入工具digo的使用,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06

最新評論

临猗县| 含山县| 炉霍县| 马鞍山市| 沁源县| 奈曼旗| 德清县| 东安县| 武冈市| 九龙县| 苍山县| 上虞市| 上高县| 遵化市| 兰西县| 江西省| 建平县| 芦山县| 昌平区| 科尔| 临泉县| 普陀区| 沙坪坝区| 镇安县| 荆州市| 东乡县| 郎溪县| 正宁县| 朔州市| 新和县| 汽车| 商水县| 同仁县| 壶关县| 天门市| 苍梧县| 鸡泽县| 丰县| 揭东县| 达拉特旗| 横山县|