赞
踩
基于 Go 1.19 创建一个站点模板爬虫,首先需要设置一个项目结构,包含必要的依赖和文件。我们将使用 `goquery` 来解析 HTML,`colly` 作为爬虫库,并用 `log` 来记录爬虫过程中的信息。以下是一个简单的示例项目结构和代码。
### 项目结构
```
mycrawler/
├── go.mod
├── go.sum
└── main.go
```
### 初始化项目
首先,在 `mycrawler` 目录下运行以下命令来初始化 Go 模块:
```sh
go mod init mycrawler
go get github.com/gocolly/colly/v2
go get github.com/PuerkitoBio/goquery
```
### main.go 文件
```go
package main
import (
"fmt"
"log"
"github.com/gocolly/colly/v2"
"github.com/PuerkitoBio/goquery"
)
// 定义一个函数来处理爬取到的页面
func handlePage(e *colly.HTMLElement) {
fmt.Println("Visited:", e.Request.URL)
// 使用 goquery 解析 HTML
doc, err := goquery.NewDocumentFromReader(e.Response.Body)
if err != nil {
log.Println("Error loading HTTP response body.", err)
return
}
// 查找并处理页面中的特定元素
doc.Find("a").Each(func(i int, s *goquery.Selection) {
title := s.Text()
link, exists := s.Attr("href")
if exists {
fmt.Printf("Link #%d: %s - %s\n", i, title, link)
}
})
}
func main() {
// 创建一个新的 Colly 收集器
c := colly.NewCollector(
colly.AllowedDomains("example.com"),
colly.CacheDir("./cache"),
)
// 绑定回调函数
c.OnHTML("html", handlePage)
// 处理请求错误
c.OnError(func(_ *colly.Response, err error) {
log.Println("Something went wrong:", err)
})
// 启动爬虫
startURL := "https://example.com"
err := c.Visit(startURL)
if err != nil {
log.Fatalf("Failed to start crawling: %v", err)
}
}
```
### 运行爬虫
确保你在 `main.go` 文件所在的目录下,然后运行以下命令来启动爬虫:
```sh
go run main.go
```
### 代码解释
1. **导入包**:引入必要的 Go 包,包括 `colly` 和 `goquery`。
2. **定义处理函数**:`handlePage` 函数用于处理每个被爬取的页面,使用 `goquery` 解析 HTML 并提取链接。
3. **创建 Colly 收集器**:配置收集器,包括允许的域名和缓存目录。
4. **绑定回调函数**:设置在爬取到页面时执行的函数,以及处理错误的函数。
5. **启动爬虫**:通过调用 `c.Visit` 方法开始爬取指定的 URL。
以上示例代码展示了如何使用 Go 创建一个基本的站点模板爬虫。可以根据需求扩展和修改爬虫逻辑以适应不同的网站和数据提取需求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。