golang 多线程代理ip爬虫代码
package main
import (
"fmt"
"net/http"
"net/url"
"sync"
"time"
)
var wg sync.WaitGroup // 用于等待所有线程完成
func main() {
urls := []string{"https://www.example.com", "https://www.google.com", "https://www.yahoo.com"}
proxyUrl, err := url.Parse("http://127.0.0.1:8888") // 代理IP的地址和端口号
if err != nil {
fmt.Println("Error parsing proxy URL", err)
return
}
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
Timeout: time.Second * 10, // 请求超时时间
}
for _, url := range urls {
wg.Add(1) // 每个URL启动一个goroutine
go fetch(url, client)
}
wg.Wait() // 等待所有goroutine完成
}
func fetch(url string, client *http.Client) {
defer wg.Done() // 在函数返回时,通知WaitGroup完成一个goroutine
resp, err := client.Get(url)
if err != nil {
fmt.Println("Error fetching", url, err)
return
}
defer resp.Body.Close()
fmt.Println("Fetched", url, resp.Status)
}golang 多线程代理ip爬虫代码示例使用了一个代理IP地址和端口号,通过 url.Parse() 函数将其解析为一个 url.URL 对象。然后,创建了一个带有代理IP的 http.Client 对象,并设置了一个请求超时时间。 在主函数中,为每个URL启动一个goroutine,并传递代理IP的 http.Client 对象。在每个goroutine的结尾处,使用 defer wg.Done() 通知WaitGroup完成一个goroutine。 http.Client 对象的 Get() 方法用于获取URL的内容。如果发生错误,则在控制台输出错误消息。否则,打印URL和响应状态。
转载请注明来自本站(66娱乐网)
66优乐网 » golang 多线程代理ip爬虫代码
66优乐网 » golang 多线程代理ip爬虫代码