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

Golang解析HTML的實戰(zhàn)指南

 更新時間:2026年03月09日 08:34:35   作者:程序員愛釣魚  
在做HTML?數(shù)據(jù)抓取、自動化數(shù)據(jù)采集時,Go?語言中最常用的?HTML?解析庫之一就是github.com/Pue,rkitoBio/goquery,下面小編就和大家詳細介紹一下它的具體使用吧

在做HTML 數(shù)據(jù)抓取、自動化數(shù)據(jù)采集時,Go 語言中最常用的 HTML 解析庫之一就是:github.com/PuerkitoBio/goquery

它提供了類似 JavaScript 中 jQuery 的 DOM 操作方式,使得 HTML 解析變得非常直觀和高效。

一、goquery 是什么

goquery 是一個 Go 語言的 HTML 文檔解析和 DOM 操作庫,由 Martin Angers 開發(fā)維護。

該庫的設(shè)計理念是:

在 Go 中實現(xiàn)類似 jQuery 的 DOM 選擇和操作方式。

核心特點:

  • 使用 CSS Selector 選擇元素
  • API 風格類似 jQuery
  • 基于 Go 標準庫 HTML 解析器
  • 操作簡單且性能穩(wěn)定

goquery 的底層解析器來自 Go 官方 HTML 解析庫:golang.org/x/net/html

二、為什么使用 goquery

在 Go 中解析 HTML 有多種方式:

  • 使用正則表達式
  • 使用 golang.org/x/net/html
  • 使用 goquery

其中 goquery 的優(yōu)勢非常明顯。

使用正則解析 HTML:

  • 代碼復(fù)雜
  • 容易出錯
  • 不適合復(fù)雜結(jié)構(gòu)

使用 html 原生解析:

  • API 偏底層
  • 操作較繁瑣

goquery 提供了更高級的 DOM 查詢接口,使 HTML 解析更接近前端開發(fā)體驗。

三、安裝 goquery

在 Go 項目中安裝:

go get github.com/PuerkitoBio/goquery

導(dǎo)入庫:

import "github.com/PuerkitoBio/goquery"

四、解析 HTML 文檔

最基礎(chǔ)的使用方式是解析 HTML 字符串或網(wǎng)頁。

示例:

package main

import (
    "fmt"
    "strings"

    "github.com/PuerkitoBio/goquery"
)

func main() {

    html := `
    <html>
    <body>
    <div class="title">Hello GoQuery</div>
    </body>
    </html>
    `

    doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    if err != nil {
        panic(err)
    }

    text := doc.Find(".title").Text()

    fmt.Println(text)
}

輸出:

Hello GoQuery

五、從網(wǎng)頁 URL 直接解析

goquery 提供了一個非常方便的函數(shù),可以直接解析網(wǎng)頁。

package main

import (
    "fmt"

    "github.com/PuerkitoBio/goquery"
)

func main() {

    doc, err := goquery.NewDocument("https://example.com")
    if err != nil {
        panic(err)
    }

    fmt.Println(doc.Find("title").Text())
}

適用于:

  • • 簡單爬蟲
  • • 快速數(shù)據(jù)采集

不過在生產(chǎn)環(huán)境中通常建議使用自定義 HTTP 請求。

六、使用 CSS 選擇器

goquery 支持常見的 CSS Selector。

例如:

選擇 class

doc.Find(".product")

選擇 id

doc.Find("#main")

選擇標簽

doc.Find("a")

組合選擇

doc.Find("div.product a.title")

屬性選擇

doc.Find("img[data-src]")

這些寫法與 jQuery 幾乎一致。

七、遍歷元素

在抓取數(shù)據(jù)時,經(jīng)常需要遍歷列表元素。

示例:

doc.Find(".item").Each(func(i int, s *goquery.Selection) {

    title := s.Find(".title").Text()

    link, _ := s.Find("a").Attr("href")

    fmt.Println(title, link)

})

Each 會遍歷所有匹配的元素。

八、讀取元素屬性

例如讀取圖片地址:

src, exists := doc.Find("img").Attr("src")

if exists {
    fmt.Println(src)
}

常見屬性:

  • href
  • src
  • data-*

九、修改 HTML 內(nèi)容

goquery 不僅可以讀取,還可以修改 DOM。

修改文本:

doc.Find(".title").SetText("New Title")

添加屬性:

doc.Find("img").SetAttr("alt", "image")

刪除元素:

doc.Find(".ad").Remove()

十、獲取完整 HTML

如果修改了 HTML,可以重新輸出。

html, err := doc.Html()

也可以輸出某個節(jié)點:

html, err := doc.Find(".content").Html()

十一、完整爬蟲示例

下面是一個簡單的網(wǎng)頁抓取示例。

package main

import (
    "fmt"
    "net/http"

    "github.com/PuerkitoBio/goquery"
)

func main() {

    resp, err := http.Get("https://example.com")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    doc, err := goquery.NewDocumentFromReader(resp.Body)
    if err != nil {
        panic(err)
    }

    doc.Find("a").Each(func(i int, s *goquery.Selection) {

        text := s.Text()

        link, _ := s.Attr("href")

        fmt.Println(text, link)

    })
}

這個程序會抓取頁面中所有鏈接。

十二、性能建議

在大規(guī)模爬蟲項目中,可以做以下優(yōu)化:

  • 使用 HTTP 連接池
  • 并發(fā)抓取多個頁面
  • 減少不必要的 DOM 查詢
  • 提前篩選 HTML 結(jié)構(gòu)

goquery 本身性能不錯,但 HTML 解析仍然屬于 CPU 密集操作。

十三、典型應(yīng)用場景

goquery 非常適合以下場景:

  • SEO 數(shù)據(jù)采集
  • 電商商品抓取
  • 新聞內(nèi)容采集
  • HTML 數(shù)據(jù)提取
  • 自動化測試

例如抓?。?/p>

  • 商品標題
  • 商品價格
  • 圖片鏈接
  • 文章正文

十四、常見問題

HTML 解析失敗

原因通常是 HTML 不完整,可以先打印 HTML 內(nèi)容確認。

網(wǎng)頁需要 JavaScript

goquery 只能解析靜態(tài) HTML。

如果網(wǎng)頁依賴 JavaScript 渲染,需要使用瀏覽器自動化工具

例如:Chromium或無頭瀏覽器方案。

十五、總結(jié)

github.com/PuerkitoBio/goquery 是 Go 生態(tài)中最流行的 HTML 解析庫之一。

主要優(yōu)勢:

  • jQuery 風格 API
  • 支持 CSS Selector
  • 使用簡單
  • 適合爬蟲開發(fā)

對于需要抓取網(wǎng)頁結(jié)構(gòu)化數(shù)據(jù)的 Go 項目來說,goquery 是一個非常高效且成熟的解決方案。

以上就是Golang解析HTML的實戰(zhàn)指南的詳細內(nèi)容,更多關(guān)于Golang解析HTML的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Go重試機制代碼更可靠

    使用Go重試機制代碼更可靠

    這篇文章主要為大家介紹了使用Go重試機制的使用,使你的代碼更加可靠,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言append切片添加元素的實現(xiàn)

    Go語言append切片添加元素的實現(xiàn)

    本文主要介紹了Go語言append切片添加元素的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 使用Go語言實現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫

    使用Go語言實現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫

    Go?語言的?goroutine?和通道(channel)非常適合用來并發(fā)地處理數(shù)據(jù),本文將通過簡單示例介紹一下如何使用Go語言并發(fā)地處理?CSV?文件并將數(shù)據(jù)插入到數(shù)據(jù)庫中,感興趣的可以了解下
    2025-01-01
  • 使用Golang?Validator包實現(xiàn)數(shù)據(jù)驗證詳解

    使用Golang?Validator包實現(xiàn)數(shù)據(jù)驗證詳解

    在開發(fā)過程中,數(shù)據(jù)驗證是一個非常重要的環(huán)節(jié),而golang中的Validator包是一個非常常用和強大的數(shù)據(jù)驗證工具,提供了簡單易用的API和豐富的驗證規(guī)則,下面我們就來看看Validator包的具體使用吧
    2023-12-12
  • golang利用不到20行代碼實現(xiàn)路由調(diào)度詳解

    golang利用不到20行代碼實現(xiàn)路由調(diào)度詳解

    這篇文章主要給大家介紹了關(guān)于golang利用不到20行代碼實現(xiàn)路由調(diào)度的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Golang中Channel實戰(zhàn)技巧與一些說明

    Golang中Channel實戰(zhàn)技巧與一些說明

    channel是Go語言內(nèi)建的first-class類型,也是Go語言與眾不同的特性之一,下面這篇文章主要給大家介紹了關(guān)于Golang中Channel實戰(zhàn)技巧與一些說明的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 深入理解Go Gin框架中間件的實現(xiàn)原理

    深入理解Go Gin框架中間件的實現(xiàn)原理

    在Go Gin框架中,中間件是一種在請求處理過程中插入的功能模塊,它可以用于處理請求的前置和后置邏輯,例如認證、日志記錄、錯誤處理等,本文將給大家介紹一下Go Gin框架中間件的實現(xiàn)原理,需要的朋友可以參考下
    2023-09-09
  • 使用Go語言自制簡單易用的Web框架

    使用Go語言自制簡單易用的Web框架

    這篇文章主要為大家詳細介紹了如何使用Go語言實現(xiàn)自制簡單易用的Web框架,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • Go Plugins插件的實現(xiàn)方式

    Go Plugins插件的實現(xiàn)方式

    目前 Plugins 僅在 Linux、FreeBSD 和 macOS 上受支持,且只支持 golang 調(diào)用,今天通過本文給大家介紹Go Plugins插件的實現(xiàn)方式,感興趣的朋友一起看看吧
    2021-08-08
  • Go語言操作Excel的實現(xiàn)示例

    Go語言操作Excel的實現(xiàn)示例

    excelize是一個功能豐富且易于使用的Go語言庫,它極大地簡化了Excel文件的讀寫操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12

最新評論

来凤县| 贺兰县| 太保市| 定远县| 石楼县| 揭西县| 资阳市| 揭西县| 乌拉特后旗| 通河县| 永春县| 广丰县| 宣威市| 宾阳县| 阳曲县| 阿拉善左旗| 牟定县| 通河县| 青海省| 北流市| 金溪县| 克山县| 松滋市| 莎车县| 方正县| 肇源县| 吴旗县| 阿鲁科尔沁旗| 普洱| 固镇县| 上思县| 临颍县| 于都县| 揭东县| 昌宁县| 务川| 漳平市| 千阳县| 辽宁省| 邛崃市| 桐城市|