ホームページ > バックエンド開発 > Golang > Colly を使用した Golang: スクレイピング時にランダムな偽のユーザー エージェントを使用する

Colly を使用した Golang: スクレイピング時にランダムな偽のユーザー エージェントを使用する

Barbara Streisand
リリース: 2025-01-11 07:57:49
オリジナル
532 人が閲覧しました

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

Web サイトのスクレイピングは、標準または不適切なユーザー エージェントの使用が原因でブロックされることがよくあります。 この記事では、Go Colly スクレイパー内でランダム化された偽のユーザー エージェントを使用して、これを軽減する簡単な方法を説明します。

偽のユーザーエージェントについて

ユーザーエージェントは、Web リクエストを行うクライアントを識別する文字列です。 これらは、アプリケーション、オペレーティング システム (Windows、macOS、Linux)、およびブラウザー (Chrome、Firefox、Safari) に関する情報を伝えます。 Web サイトは、セキュリティや分析などのさまざまな目的でこの情報を使用します。

一般的なユーザー エージェント文字列は次のようになります (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>
ログイン後にコピー

スクレイピングするときは、Web サイトの robots.txt と利用規約を常に尊重することを忘れないでください。 ランダムなユーザー エージェントの使用は、責任ある Web スクレイピングのための多くの手法のうちの 1 つです。 プロキシやその他のヘッダー管理戦略の使用も検討してください。

参考文献:

以上がColly を使用した Golang: スクレイピング時にランダムな偽のユーザー エージェントを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート