创建一个基于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 main
import (
"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" // 替换为你想要爬取的网站URL
doc, err := fetchURL(url)
if err != nil {
log.Fatal(err)
}
scrapeTitles(doc)
}
在这个示例中,我们定义了两个主要功能:
-
fetchURL
:该函数从给定的URL获取页面内容,并使用goquery
将其解析为文档对象。 -
scrapeTitles
:此函数遍历文档中所有的<h1>
标签,并打印出它们的文本内容。
你可以根据需要修改scrapeTitles
函数,以提取不同的HTML元素或属性。例如,如果你想抓取所有链接,可以使用a
标签;如果想抓取图片,可以使用img
标签,并提取src
属性。
最后,记得在实际使用爬虫时,尊重目标网站的爬虫政策,不要对服务器造成过大的负担,同时处理好抓取数据的存储和使用,确保符合法律法规和道德规范。