基於 go + xpath 爬蟲小案例

yangliang發表於2021-07-11

爬蟲步驟

  • 明確目標(確定在哪個網站搜尋)
  • 爬(爬下內容)
  • 取(篩選想要的)
  • 處理資料(按照你的想法去處理)

擴充套件包

go get github.com/antchfx/htmlquery

程式碼如下

package main

import (
    "fmt"
    "github.com/antchfx/htmlquery"
    "strings"
    "sync"
)

const url = "https://learnku.com/go"

var wg sync.WaitGroup

func ParseEmails() {
    defer wg.Done()
    defer func() {
        if recover() != nil {
            fmt.Println(recover())
        }
    }()
    doc, err := htmlquery.LoadURL(url)
    if err != nil {
        panic("解析URL錯誤")
    }
    rules := "//span[@class='topic-title']/text()"
    nodes, err := htmlquery.QueryAll(doc, rules)

    if err != nil {
        panic(`not a valid XPath expression.`)
    }
    if len(nodes) == 0 {
        fmt.Println("未找到任何內容")
        return
    }
    //fmt.Printf("%-v\n", nodes)
    for _, node := range nodes {
        res := htmlquery.InnerText(node)
        resTrim := strings.TrimSpace(res)
        if resTrim != "" {
            fmt.Printf("parse value == %s\n", resTrim)
        }
    }

}

func main() {
    wg.Add(1)
    go ParseEmails()
    wg.Wait()
    fmt.Println("爬蟲完成")
}

執行結果

......
parse value == JWT身份認證(附帶原始碼講解)
parse value == [系列文章] Go 學習筆記 - Go 基礎語法(2)
parse value ==14 課:併發 concurrency ?《Go 程式設計基礎(視訊)》
parse value == 組合函式 Collection《Go 程式設計例項 Go by Example 2020 》
parse value == 今日面試總結
爬蟲完成
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章