Go语言实现带代理的HTTP网页抓取

山海之间
山海之间
发布时间:2026-10-15| 7人浏览过
原创

本文展示如何使用 Go 语言的标准库 net/http 进行网页抓取,重点涵盖两种代理配置方式:指定固定 IP 代理和自动读取环境变量。通过封装 HTTP 客户端并处理响应体,实现稳定获取页面 HTML 源码。

准备条件

使用 Go 标准库即可实现,无需引入第三方依赖。主要涉及以下核心包:

  • fmt:用于输出结果。
  • log:用于错误日志记录。
  • net/http:核心网络请求库。
  • net/url:解析代理地址 URL。
  • io/ioutil:读取响应数据(注:Go 1.16+ 推荐使用 io 和 os)。

真实操作顺序

第1步:配置代理传输层

目的:根据需求选择静态代理或环境代理,确保网络请求通过指定出口发送。

  1. 入口/参数:proxy_addr 字符串指针,格式为 http://host:port。
  2. 动作:解析代理地址并创建 http.Transport。若需从系统环境变量($http_proxy 或 $HTTP_PROXY)读取,可调用 http.ProxyFromEnvironment。
// 指定代理ip
func getTransportFieldURL(proxy_addr *string) (transport *http.Transport) {
	url_i := url.URL{}
	url_proxy, _ := url_i.Parse(*proxy_addr)
	transport = &http.Transport{Proxy : http.ProxyURL(url_proxy)}
	return
}

// 从环境变量$http_proxy或$HTTP_PROXY中获取HTTP代理地址
func getTransportFromEnvironment() (transport *http.Transport) {
	transport = &http.Transport{Proxy : http.ProxyFromEnvironment}
	return
}

第2步:构建请求与执行抓取

目的:发起 GET 请求并安全地读取响应内容。

  1. 入口/参数目标 url 和目标 proxy_addr。
  2. 动作:
    • 使用上一步的 Transport 创建 http.Client。
    • 使用 http.NewRequest 构建 GET 请求。
    • 调用 client.Do(req) 执行请求。
    • 检查状态码是否为 200,若是则读取 Body 并存为字符串;否则返回空值。
  3. 重要参数:必须确保在读取完 Body 后调用 resp.Body.Close() 以避免资源泄漏。
func fetch(url , proxy_addr *string) (html string) {
	transport := getTransportFieldURL(proxy_addr)
	client := &http.Client{Transport : transport}
	req, err := http.NewRequest("GET", *url, nil)
	if err != nil {
		log.Fatal(err.Error())
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err.Error())
	} 
	if resp.StatusCode == 200 {
		robots, err := ioutil.ReadAll(resp.Body);
		resp.Body.Close()
		if err != nil {
			log.Fatal(err.Error())
		}
		html = string(robots);
	} else {
		html = ""
	}
	return
}

第3步:主函数调用测试

目的:验证抓取功能。

func main() {
	proxy_addr := "http://183.221.250.137:80/"
	url := "http://www.baidu.com/s?wd=ip"
	html := fetch(&url, &proxy_addr)
	fmt.Println(html)
}

完成判断

程序运行后,控制台应打印出目标 URL 对应的 HTML 源码文本,且无报错输出。若状态码非 200,则 html 变量为空字符串。

简要总结

以上就是Go语言通过http抓取网页的详细方法,更多关于Go语言网络编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。