創建一個基于Go 1.19的站點模板爬蟲涉及到幾個關鍵步驟:初始化項目,安裝必要的包,編寫爬蟲邏輯,以及處理和存儲抓取的數據。下面是一個簡單的示例,使用goquery
庫來解析HTML,并使用net/http
來發起HTTP請求。請注意,實際部署爬蟲時,需要遵守目標網站的robots.txt
規則和版權政策。
首先,確保你的Go環境已經更新到了1.19版本。可以通過運行go version
來檢查。
接下來,創建一個新的Go模塊:
mkdir site_crawler
cd site_crawler
go mod init site_crawler
安裝goquery
庫:
go get github.com/PuerkitoBio/goquery
現在,我們可以開始編寫爬蟲代碼了。以下是一個基本的爬蟲示例,用于抓取網頁上的標題:
package mainimport ("fmt""log""net/http""github.com/PuerkitoBio/goquery"
)func fetchURL(url string) (*goquery.Document, error) {resp, err := http.Get(url)if err != nil {return nil, err}defer resp.Body.Close()if resp.StatusCode != 200 {return nil, fmt.Errorf("status code error: %d %s", resp.StatusCode, resp.Status)}doc, err := goquery.NewDocumentFromReader(resp.Body)if err != nil {return nil, err}return doc, nil
}func scrapeTitles(doc *goquery.Document) {doc.Find("h1").Each(func(i int, s *goquery.Selection) {title := s.Text()fmt.Println(title)})
}func main() {url := "http://example.com" // 替換為你想要爬取的網站URLdoc, err := fetchURL(url)if err != nil {log.Fatal(err)}scrapeTitles(doc)
}
在這個示例中,我們定義了兩個主要功能:
fetchURL
:該函數從給定的URL獲取頁面內容,并使用goquery
將其解析為文檔對象。scrapeTitles
:此函數遍歷文檔中所有的<h1>
標簽,并打印出它們的文本內容。
你可以根據需要修改scrapeTitles
函數,以提取不同的HTML元素或屬性。例如,如果你想抓取所有鏈接,可以使用a
標簽;如果想抓取圖片,可以使用img
標簽,并提取src
屬性。
最后,記得在實際使用爬蟲時,尊重目標網站的爬蟲政策,不要對服務器造成過大的負擔,同時處理好抓取數據的存儲和使用,確保符合法律法規和道德規范。