网站抓取通常会由于使用标准或不适当的用户代理而导致被阻止。 本文演示了一种简单的方法,通过在 Go Colly 抓取工具中使用随机的虚假用户代理来缓解此问题。
了解虚假用户代理
用户代理是标识发出 Web 请求的客户端的字符串。 它们传达有关应用程序、操作系统(Windows、macOS、Linux)和浏览器(Chrome、Firefox、Safari)的信息。 网站将此信息用于各种目的,包括安全和分析。
典型的用户代理字符串可能如下所示(Android 上的 Chrome):
<code>'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36'</code>
Go Colly 的默认用户代理:
<code>"User-Agent": "colly - //m.sbmmt.com/link/953bd83cb0b9c9f9dc4b3ba0bfc1b236",</code>
轻松识别您的抓取工具,增加被阻止的风险。 因此,采用自定义的、随机的用户代理至关重要。
使用 Go Colly 实现虚假用户代理
修改请求标头以包含自定义用户代理是使用 OnRequest()
回调实现的。 这确保每个请求使用不同的用户代理字符串。
<code class="language-go">package main import ( "bytes" "log" "github.com/gocolly/colly" ) func main() { c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148") }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
这为所有请求设置一个用户代理。 为了更稳健的抓取,请使用随机方法。
通过随机用户代理轮换
github.com/lib4u/fake-useragent
包简化了随机用户代理选择。
<code class="language-go">package main import ( "bytes" "fmt" "log" "github.com/gocolly/colly" uaFake "github.com/lib4u/fake-useragent" ) func main() { ua, err := uaFake.New() if err != nil { fmt.Println(err) } c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", ua.Filter().GetRandom()) }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
此代码片段为每个请求检索一个随机用户代理。
使用特定的虚假用户代理
github.com/lib4u/fake-useragent
提供过滤选项。 例如,要使用随机桌面 Chrome 用户代理:
<code class="language-go">r.Headers.Set("User-Agent", ua.Filter().Chrome().Platform(uaFake.Desktop).Get())</code>
记住在抓取时始终尊重网站的robots.txt
和服务条款。 使用随机用户代理是负责任的网络抓取的众多技术之一; 也考虑使用代理和其他标头管理策略。
参考资料:
以上是Golang 与 Colly:抓取时使用随机假用户代理的详细内容。更多信息请关注PHP中文网其他相关文章!