目录
在现代互联网中,网络爬虫(Web Scraper)已经成为从网页中提取数据的常见工具。Go语言(Golang)因其高性能和并发编程的优势,成为开发网络爬虫的热门选择之一。本文将介绍如何使用Go1.19构建一个简单的站点模板爬虫。
1. 环境准备
安装Go语言
首先,确保你已经安装了Go1.19。如果尚未安装,可以从 Go官方网站 下载并安装最新版本。
$ go version
go version go1.19.0 linux/amd64
初始化项目
创建一个新的Go项目,并初始化模块。
$ mkdir go-web-scraper
$ cd go-web-scraper
$ go mod init go-web-scraper
2. 引入依赖包
在本项目中,我们将使用以下两个常用包:
net/http
:用于发送HTTP请求和接收响应。golang.org/x/net/html
:用于解析HTML文档。
在go.mod
文件中添加依赖:
module go-web-scraper
go 1.19
require (
golang.org/x/net v0.0.0-20220127200216-c8a6f5222b06
)
3. 编写爬虫代码
3.1 发送HTTP请求
首先,编写一个函数来发送HTTP请求并返回响应的HTML内容。
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()
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("error: status code %d", resp.StatusCode)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
3.2 解析HTML
使用golang.org/x/net/html
包解析HTML内容,提取目标数据。
package main
import (
"golang.org/x/net/html"
"strings"
)
// parseHTML 解析HTML内容并提取目标数据
func parseHTML(body string) ([]string, error) {
doc, err := html.Parse(strings.NewReader(body))
if err != nil {
return nil, err
}
var urls []string
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" {
urls = append(urls, a.Val)
break
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
return urls, nil
}
3.3 主程序
结合上述函数,编写主程序进行爬取和解析。
package main
import (
"fmt"
"log"
)
func main() {
url := "http://example.com" // 替换为目标URL
fmt.Printf("Fetching URL: %s\n", url)
// 获取URL内容
body, err := fetchURL(url)
if err != nil {
log.Fatalf("Failed to fetch URL: %v", err)
}
// 解析HTML内容
urls, err := parseHTML(body)
if err != nil {
log.Fatalf("Failed to parse HTML: %v", err)
}
// 打印提取的链接
fmt.Println("Extracted URLs:")
for _, u := range urls {
fmt.Println(u)
}
}
4. 运行爬虫
执行以下命令运行爬虫:
$ go run main.go
这将输出从指定URL提取的所有链接。
5. 总结
本文介绍了如何使用Go1.19构建一个简单的站点模板爬虫。通过发送HTTP请求和解析HTML文档,我们可以高效地从网页中提取所需的数据。Go语言的并发编程优势还可以帮助我们轻松扩展爬虫的功能,以处理更大规模的数据爬取任务。在实际应用中,可以根据需求进一步优化和扩展爬虫的功能。