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 サイトの他の関連記事を参照してください。