Golang爬虫效率出众,且仅靠标准库就能实现。直接用真实IP爬取易被目标网站封禁,还会泄露自身隐私,配置HTTP代理可解决该问题——相当于让“中间人”代为发送请求,既掩盖真实IP,又降低被封风险。

第一步:无代理基础爬虫
核心功能:爬取百度首页HTML并打印到控制台,代码可直接运行。
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
targetUrl := "https://www.baidu.com"
// 发送GET请求
resp, err := http.Get(targetUrl)
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close() // 防止资源泄露,必写
// 读取并打印响应内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取内容失败:", err)
return
}
fmt.Println(string(body))
}
核心说明:
1.依赖Go标准库,无需额外安装包,go run 文件名.go即可运行。
2.defer resp.Body.Close()必须写,避免内存泄露。
3.运行成功后,控制台输出百度首页HTML代码。
第二步:添加HTTP代理
核心思路:通过http.Transport配置代理,传给http.Client,用自定义客户端发送请求。
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
targetUrl := "https://www.baidu.com"
// 代理格式:带验证"http://用户名:密码@代理IP:端口",不带验证"http://代理IP:端口"
proxyStr := "http://username:password@proxyserver:port"
// 1. 解析代理地址
proxyURL, err := url.Parse(proxyStr)
if err != nil {
fmt.Println("解析代理失败:", err)
return
}
// 2. 配置带代理的传输对象
transport := &http.Transport{Proxy: http.ProxyURL(proxyURL)}
// 3. 创建自定义客户端(走代理)
client := &http.Client{Transport: transport}
// 4. 发送请求并读取内容
req, _ := http.NewRequest("GET", targetUrl, nil)
resp, err := client.Do(req)
if err != nil {
fmt.Println("代理请求失败:", err)
return
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
核心说明:
1.需替换proxyStr为有效代理地址才能正常运行。
2.自定义http.Client是实现代理的关键,替代了默认的http.Get()。
3.Go 1.16+版本中,ioutil.ReadAll()可替换为os.ReadAll()(需导入"os"包)。