Go Collyを用いたウェブスクレイピングにおけるユーザーエージェントの変更

Sora Fujimoto
AI Solutions Architect
27-Sep-2024

ウェブスクレイピングプロジェクトに取り組んでいる場合、User-Agent文字列を変更することは、スクレイパーがブロックされたり、ボットとしてフラグ付けされたりするのを防ぐ最も効果的な方法の1つです。Webサーバーは、User-Agent文字列を使用して、リソースにアクセスしているクライアントの種類(ブラウザ、ボット、スクレイパーなど)を識別することがよくあります。スクレイパーが各リクエストで同じUser-Agentを送信すると、検出され、ブロックされる可能性があります。この記事では、Goの一般的なウェブスクレイピングフレームワークであるGo CollyでUser-Agentを変更して、スクレイピングの取り組みをより効果的で回復力のあるものにする方法について説明します。
Collyとは?
Collyは、高速でエレガントなGophersクロールフレームワークです。Collyは、あらゆる種類のクローラー/スクレイパー/スパイダーを作成するためのクリーンなインターフェースを提供します。Collyを使用すると、ウェブサイトから構造化されたデータを簡単に抽出し、データマイニング、データ処理、アーカイブなど、幅広いアプリケーションに使用できます。
CollyのUser-Agentとは?
User-Agentは、リクエストヘッダーに見られる特殊な文字列で、サーバーがクライアントのオペレーティングシステムとそのバージョン、ブラウザの種類とそのバージョン、その他の詳細を識別できるようにします。
通常のブラウザの場合、User-Agent文字列は次のようになります。
-
Windowsオペレーティングシステム上のGoogle Chromeバージョン128:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 -
Firefox:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
ただし、Colly(ウェブスクレイピングフレームワーク)では、デフォルトのUser-Agentは次のとおりです。
colly - https://github.com/gocolly/colly
データスクレイピングのコンテキストでは、最も一般的な反スクレイピング対策の1つは、User-Agentを調べて、リクエストが通常のブラウザから来ているかどうかを判断することです。これにより、ボットを識別することができます。
CollyのデフォルトのUser-Agentは、明らかにターゲットウェブサイトに「私はボットです」と直接伝えているようなものです。これにより、ウェブサイトは、デフォルトの設定でCollyを使用しているスクレイピングの試みを簡単に検出してブロックすることができます。
ボーナスコード
トップキャプチャソリューションのボーナスコードを請求しましょう。 CapSolver: WEBS. コードを引き換えると、各チャージ後に5%のボーナスが追加され、無制限になります。
なぜUser-Agentを変更する必要があるのか?
コードに飛び込む前に、User-Agentを変更することが重要な理由を簡単に見てみましょう。
- 検出の回避: 多くのウェブサイトは、受信したUser-Agent文字列を分析して、疑わしいまたは反復的なパターンを検出する反ボットメカニズムを使用しています。スクレイパーが各リクエストで同じUser-Agentを送信すると、簡単に検出されてしまいます。
- 実際のブラウザの模倣: User-Agent文字列を変更することで、スクレイパーはChrome、Firefox、Safariなどの実際のブラウザを模倣できるため、ボットとしてフラグ付けされる可能性が低くなります。
- ユーザーエクスペリエンスの向上とCAPTCHAの解決: 多くのウェブサイトは、ユーザーがボットではないことを確認するためにCAPTCHAチャレンジを使用しており、より安全なブラウジングエクスペリエンスを実現しています。しかし、自動化タスクの場合、これらのチャレンジはワークフローを中断する可能性があります。スクレイパーがこのようなCAPTCHAチャレンジに遭遇した場合、CapSolverなどのツールを統合して自動的に解決することで、中断することなく自動化をスムーズに継続できます。
CollyでカスタムUser-Agentを設定する方法
確かに!テキストを英語に翻訳して、適切にフォーマットします。以下は、翻訳およびフォーマットされたバージョンです。
CollyでのUser-Agentの処理
https://httpbin.org/user-agentにアクセスすることで、User-Agentの値を確認できます。Collyは、リクエストを処理するために、主に3つの方法を提供しています。
- Visit: ターゲットウェブサイトにアクセスする
- OnResponse: レスポンスコンテンツを処理する
- OnError: リクエストエラーを処理する
以下は、httpbinにアクセスしてUser-Agentを出力する完全なコード例です。
go
package main
import (
"github.com/gocolly/colly"
"log"
)
func main() {
// コレクターを作成する
c := colly.NewCollector()
// onResponseコールバックを呼び出して、HTMLコンテンツを出力する
c.OnResponse(func(r *colly.Response) {
log.Println(string(r.Body))
})
// リクエストエラーを処理する
c.OnError(func(e *colly.Response, err error) {
log.Println("リクエスト失敗、エラー:", err)
})
// スクラピングを開始する
err := c.Visit("https://httpbin.org/user-agent")
if err != nil {
log.Fatal(err)
}
}
これは、次の出力を生成します。
json
{
"user-agent": "colly - https://github.com/gocolly/colly"
}
User-Agentのカスタマイズ
Collyは、colly.UserAgentメソッドを提供してUser-Agentをカスタマイズします。各リクエストに異なるUser-Agentを使用する場合は、User-Agentのリストを定義して、そこからランダムに選択することができます。以下は例です。
go
package main
import (
"github.com/gocolly/colly"
"log"
"math/rand"
)
var userAgents = []string{
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 OPR/113.0.0.0",
}
func main() {
// コレクターを作成する
c := colly.NewCollector(
// User-Agentを設定する
colly.UserAgent(userAgents[rand.Intn(len(userAgents))]),
)
// onResponseコールバックを呼び出して、HTMLコンテンツを出力する
c.OnResponse(func(r *colly.Response) {
log.Println(string(r.Body))
})
// リクエストエラーを処理する
c.OnError(func(e *colly.Response, err error) {
log.Println("リクエスト失敗、エラー:", err)
})
// スクラピングを開始する
err := c.Visit("https://httpbin.org/user-agent")
if err != nil {
log.Fatal(err)
}
}
fake-useragentライブラリの使用
カスタムUser-Agentリストを維持する代わりに、fake-useragentライブラリを使用してランダムなUser-Agentを生成することができます。以下は例です。
go
package main
import (
browser "github.com/EDDYCJY/fake-useragent"
"github.com/gocolly/colly"
"log"
)
func main() {
// コレクターを作成する
c := colly.NewCollector(
// User-Agentを設定する
colly.UserAgent(browser.Random()),
)
// onResponseコールバックを呼び出して、HTMLコンテンツを出力する
c.OnResponse(func(r *colly.Response) {
log.Println(string(r.Body))
})
// リクエストエラーを処理する
c.OnError(func(e *colly.Response, err error) {
log.Println("リクエスト失敗、エラー:", err)
})
// スクラピングを開始する
err := c.Visit("https://httpbin.org/user-agent")
if err != nil {
log.Fatal(err)
}
}
CapSolverの統合
CollyでUser-Agentをランダム化しても、ある程度はボットとして識別されるのを回避できますが、より洗練された反ボットチャレンジに対処する場合には、十分ではない可能性があります。このようなチャレンジの例としては、reCAPTCHA、captcha、captcha、captcha WAF、captcha、Cloudflare Turnstileなどがあります。これらのシステムは、リクエストヘッダーの有効性をチェックし、ブラウザのフィンガープリントを検証し、IPのリスクを評価し、複雑なJS暗号化パラメータや難しい画像認識タスクを要求する場合があります。
これらのチャレンジは、データスクレイピングの取り組みを大幅に阻害する可能性があります。しかし、心配する必要はありません。上記すべてのボットチャレンジは、CapSolverによって処理できます。CapSolverは、AIベースの自動Webアンブロックテクノロジーを使用して、CAPTCHAを自動的に解決します。すべての複雑なタスクは、数秒で正常に解決できます。
公式ウェブサイトは、複数の言語でSDKを提供しており、プロジェクトに簡単に統合できます。スクレイピングプロジェクトにこのソリューションを実装する方法の詳細については、CapSolverのドキュメントを参照してください。
確かに!Go CollyでUser-Agentを変更する記事の結論を次に示します。
まとめ
Go CollyでUser-Agentを変更することは、効果的で回復力のあるウェブスクレイピングを実現するための重要なテクニックです。カスタムUser-Agentを実装することで、スクレイパーがターゲットウェブサイトによって検出され、ブロックされるリスクを大幅に軽減できます。以下は、これまで説明してきた主要なポイントのまとめです。
-
ウェブスクレイピングプロジェクトでUser-Agentを変更することが重要な理由について説明しました。
-
CollyでカスタムUser-Agentを設定するさまざまな方法を調べました。これには、次のようなものがあります。
- 事前に定義されたUser-Agentのリストを使用する
- このリストからランダムに選択を実装する
- より多様なオプションのためにfake-useragentライブラリを使用する
-
これらのテクニックが、実際のブラウザの動作を模倣し、検出を回避するのにどのように役立つかを説明しました。
-
より高度な反ボットチャレンジの場合、CAPTCHAやその他の複雑な検証システムを処理するために、CapSolverなどの専門ツールを使用することについて説明しました。
User-Agentを変更することは効果的な戦略ですが、責任ある効率的なウェブスクレイピングの一部分に過ぎないことを忘れないでください。常にウェブサイトの利用規約とrobots.txtファイルを尊重し、レート制限を実装し、スクレイピング活動の倫理的な影響を考慮してください。
これらのテクニックをウェブスクレイピングのベストプラクティスと組み合わせることで、Go Collyを使用してより堅牢で信頼性の高いスクレイパーを作成できます。ウェブテクノロジーは進化し続けているため、最新のスクレイピングテクニックとツールを最新の状態に保つことが、ウェブスクレイピングプロジェクトの効果を維持するために不可欠となります。
準拠に関する注記
重要: ウェブスクレイピングを行う際には、法的および倫理的なガイドラインに従うことが重要です。常に、ターゲットウェブサイトをスクレイピングする許可を得ていることを確認し、サイトの
robots.txtファイルと利用規約を尊重してください。CapSolverは、非準拠の活動にサービスを悪用することを強く禁止しています。 適切な承認なしにCAPTCHAを回避するために自動ツールを悪用すると、法的措置につながる可能性があります。潜在的な問題を回避するために、スクレイピング活動が適用されるすべての法律および規制に準拠していることを確認してください。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

CAPTCHA 2026を解くために最適な拡張機能はどれですか?
オンラインセキュリティの進化し続ける世界において、CAPTCHAのチャレンジはインターネットユーザーにとって一般的な障壁となっています...

Nikolai Smirnov
12-Dec-2025

Sample Post
この記事では、Lumiproxyとは何か、および提供しているサービスについて紹介します。

Nikolai Smirnov
12-Dec-2025

Genlogin: 革新するウェブ自動化体験
この記事では、Genloginおよびその提供するサービスについてご紹介します。

Sora Fujimoto
12-Dec-2025

プロクシーズ.io : 個別のプロキシ あらゆるタスクに
本記事では、Proxys.ioとは何なのかと、彼らが提供するサービスについてご紹介します。

Nikolai Smirnov
12-Dec-2025

タブプロキシ: お得な海外住宅用プロキシ
この記事では、Tabproxyとは何か、および彼らが提供するサービスについてご紹介します。

Anh Tuan
12-Dec-2025

IP2World 住宅用プロキシ: リーディンググローバルIPプロキシソリューション
本記事では、IP2Worldとは何かおよび提供するサービスについてご紹介します。

Ethan Collins
12-Dec-2025


