首页 > 后端开发 > Golang > Golang 与 Colly:抓取时使用随机假用户代理

Golang 与 Colly:抓取时使用随机假用户代理

Barbara Streisand
发布: 2025-01-11 07:57:49
原创
532 人浏览过

Golang with Colly: Use Random Fake User-Agents When Scraping

网站抓取通常会由于使用标准或不适当的用户代理而导致被阻止。 本文演示了一种简单的方法,通过在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板