目录
项目介绍
本文将介绍如何使用Go1.19实现一个简单的站点模板爬虫。这个爬虫将访问指定的网站,获取页面内容并解析需要的数据,最终将数据存储在本地文件中。此教程适合具有基本Go编程经验的开发者。
环境配置
在开始编写爬虫代码之前,我们需要进行环境配置。
1. 安装Go1.19:
wget https://golang.org/dl/go1.19.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
2. 初始化Go模块:
mkdir go-scraper
cd go-scraper
go mod init go-scraper
核心依赖库
我们将使用以下Go依赖库来构建爬虫:
net/http
: 进行HTTP请求golang.org/x/net/html
: 解析HTML内容
在go.mod
文件中添加这些依赖:
module go-scraper
go 1.19
require (
golang.org/x/net v0.0.0-20220726194316-cdc2c7f1e80a // indirect
)
爬虫实现
HTTP 请求
首先,我们编写一个函数来发送HTTP请求并获取网页内容:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func fetchURL(url string) (string, error) {
resp, err := http.Get(url)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
func main() {
url := "https://example.com"
content, err := fetchURL(url)
if err != nil {
fmt.Println("Error fetching URL:", err)
return
}
fmt.Println(content)
}
数据解析
接下来,我们将使用golang.org/x/net/html
库来解析HTML内容,并提取我们感兴趣的数据:
package main
import (
"fmt"
"golang.org/x/net/html"
"strings"
)
func parseHTML(content string) []string {
var data []string
doc, err := html.Parse(strings.NewReader(content))
if err != nil {
fmt.Println("Error parsing HTML:", err)
return data
}
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, a := range n.Attr {
if a.Key == "href" {
data = append(data, a.Val)
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
return data
}
数据存储
最后,我们将提取到的数据存储到本地文件中:
package main
import (
"fmt"
"os"
)
func saveToFile(filename string, data []string) error {
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
for _, line := range data {
_, err := file.WriteString(line + "\n")
if err != nil {
return err
}
}
return nil
}
func main() {
url := "https://example.com"
content, err := fetchURL(url)
if err != nil {
fmt.Println("Error fetching URL:", err)
return
}
data := parseHTML(content)
err = saveToFile("output.txt", data)
if err != nil {
fmt.Println("Error saving to file:", err)
}
}
运行与测试
确保所有代码在一个目录中,并且每个部分都包含在main.go
文件中。运行以下命令来执行爬虫:
go run main.go
爬虫将访问指定的网站,解析链接并将其保存到output.txt
文件中。
代码详解
fetchURL(url string)
: 发送HTTP GET请求并返回页面内容。parseHTML(content string)
: 解析HTML内容,提取所有链接。saveToFile(filename string, data []string)
: 将提取到的数据保存到本地文件。
注意事项
- 遵守robots.txt: 在爬取网站之前,检查并遵守目标网站的robots.txt文件。
- 频率限制: 设置适当的请求频率,避免对目标网站造成压力。
- 错误处理: 添加更多的错误处理代码,以便更好地调试和维护。
通过上述步骤,我们成功实现了一个基于Go1.19的简单站点模板爬虫。这个爬虫可以根据需要进行扩展,以处理更多复杂的需求。
标签:return,string,err,Go1.19,nil,爬虫,go,模板 From: https://blog.csdn.net/weixin_41859354/article/details/140102177