众力资讯网

新手必看:Go代理爬虫极简实现

Golang爬虫效率出众,且仅靠标准库就能实现。直接用真实IP爬取易被目标网站封禁,还会泄露自身隐私,配置HTTP代理可

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"包)。