基于Go1.19的站点模板爬虫

目录

1. 环境准备

安装Go语言

初始化项目

2. 引入依赖包

3. 编写爬虫代码

3.1 发送HTTP请求

3.2 解析HTML

3.3 主程序

4. 运行爬虫

5. 总结


在现代互联网中,网络爬虫(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语言的并发编程优势还可以帮助我们轻松扩展爬虫的功能,以处理更大规模的数据爬取任务。在实际应用中,可以根据需求进一步优化和扩展爬虫的功能。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌南竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值