首先我們必須安裝Go,下載和安裝Go的說明。
我們為專案建立一個新資料夾,移動到該目錄並執行以下命令:
go mod init scraper
? go mod init 指令用於在運行目錄中初始化一個新的 Go 模組,並建立一個 go.mod 檔案來追蹤程式碼依賴關係。依賴管理
現在讓我們安裝 Colibri:
go get github.com/gonzxlez/colibri
? Colibri 是一個 Go 包,它允許我們使用 JSON 中定義的一組規則來抓取和提取網路上的結構化資料。儲存庫
我們定義了 colibri 用於提取我們需要的資料的規則。文件
我們將向 URL https://pkg.go.dev/search?q=xpath 發出 HTTP 請求,其中包含與 Go Packages 中 xpath 相關的 Go 套件的查詢結果。
使用網頁瀏覽器中包含的開發工具,我們可以檢查頁面的 HTML 結構。瀏覽器開發工具有哪些?
<div class="SearchSnippet"> <div class="SearchSnippet-headerContainer"> <h2> <a href="/github.com/antchfx/xpath" data-gtmc="search result" data-gtmv="0" data-test-id="snippet-title"> xpath <span class="SearchSnippet-header-path">(github.com/antchfx/xpath)</span> </a> </h2> </div> <div class="SearchSnippet-infoLabel"> <a href="/github.com/antchfx/xpath?tab=importedby" aria-label="Go to Imported By"> <span class="go-textSubtle">Imported by </span><strong>143</strong> </a> <span class="go-textSubtle">|</span> <span class="go-textSubtle"> <strong>v1.2.5</strong> published on <span data-test-id="snippet-published"><strong>Oct 26, 2023</strong></span> </span> <span class="go-textSubtle">|</span> <span data-test-id="snippet-license"> <a href="/github.com/antchfx/xpath?tab=licenses" aria-label="Go to Licenses"> MIT </a> </span> </div> </div>
表示查詢結果的 HTML 結構片段。
然後我們需要一個選擇器「packages」,它將在HTML 中尋找類別SearchSnippet 類別的所有div 元素,從這些元素中選擇一個選擇器「 name」 將採用元素h2 內元素a 的文字和選擇器「path” 將採用 中a 元素的href 元素的href > 元素。換句話說,「名稱」
將採用Go包的名稱,「
{ "method": "GET", "url": "https://pkg.go.dev/search?q=xpath", "timeout": 10000, "selectors": { "packages": { "expr": "div.SearchSnippet", "all": true, "type": "css", "selectors": { "name": "//h2/a/text()", "path": "//h2/a/@href" } } } }
Go 中的程式碼
package main import ( "encoding/json" "fmt" "github.com/gonzxlez/colibri" "github.com/gonzxlez/colibri/webextractor" ) var rawRules = `{ "method": "GET", "url": "https://pkg.go.dev/search?q=xpath", "timeout": 10000, "selectors": { "packages": { "expr": "div.SearchSnippet", "all": true, "type": "css", "selectors": { "name": "//h2/a/text()", "path": "//h2/a/@href" } } } }` func main() { we, err := webextractor.New() if err != nil { panic(err) } var rules colibri.Rules err = json.Unmarshal([]byte(rawRules), &rules) if err != nil { panic(err) } output, err := we.Extract(&rules) if err != nil { panic(err) } fmt.Println("URL:", output.Response.URL()) fmt.Println("Status code:", output.Response.StatusCode()) fmt.Println("Content-Type", output.Response.Header().Get("Content-Type")) fmt.Println("Data:", output.Data) }
? WebExtractor 是 Colibri 的預設接口,可以開始在網路上抓取或提取資料。
使用 webextractor 的新功能,我們產生一個 Colibri 結構,其中包含開始提取資料所需的內容。
然後我們將 JSON 格式的規則轉換為 Rules 結構,並呼叫 Extract 方法將規則作為參數傳送。
我們獲得輸出,HTTP 回應的 URL、HTTP 狀態代碼、回應的內容類型以及使用選擇器提取的資料都列印在螢幕上。請參閱輸出結構文件。
go mod tidy
? go mod tidy 指令確保 go.mod 中的依賴項與模組原始碼相符。
go run scraper.go
結論
在這篇文章中,我們學習如何使用 Colibri 套件在 Go 中執行網頁抓取,使用 CSS 和 XPath 選擇器定義擷取規則。 Colibri 是為那些希望在 Go 中自動化 Web 資料收集的人提供的工具。其基於規則的方法和易用性使其成為所有經驗水平的開發人員的一個有吸引力的選擇。 簡而言之,Go 中的網頁抓取是一種強大且多功能的技術,可用於從各種網站中提取資訊。需要強調的是,網頁抓取必須符合道德規範,尊重網站的條款和條件,並避免伺服器超載。
以上是網頁抓取的詳細內容。更多資訊請關注PHP中文網其他相關文章!