geziyor を使ったウェブスクレイピングの方法

Adélia Cruz
Neural Network Developer
27-Sep-2024
Geziyor: Go 用の強力な Web スクレイピングフレームワーク
Geziyor は、Go 用の最新の Web スクレイピングフレームワークであり、Web サイトをスクレイピングし、データを効率的に抽出するための強力なツールを提供するように設計されています。多くの従来のスクレイピングライブラリとは異なり、Geziyor は、高度にカスタマイズ可能なスクレイピングワークフローを提供しながら、使いやすさを重視しています。
主要な機能:
- 並行処理サポート: 非同期操作をサポートしており、複数のページを同時にスクレイピングできるため、パフォーマンスが向上します。
- リクエストのカスタマイズ: ヘッダー、Cookie、カスタムパラメータなど、HTTP リクエストを簡単に変更できます。
- 自動スロットリング: サーバーへのリクエストをペース配分することにより、スクレイピング防止メカニズムのトリガーを防ぎます。
- 組み込みのキャッシュと永続化: スクレイピングされたデータとレスポンスをキャッシュして、冗長なリクエストを回避できます。
- 拡張性: リクエスト/レスポンスのインターセプト、カスタムミドルウェアなど、機能を拡張したり、イベントを処理したりするためのフックを提供します。
- プロキシをサポート: 回転 IP や制限の回避のために、プロキシを簡単に統合できます。
前提条件
Geziyor を使用するには、以下を確保してください。
- Go 1.12+ は Go の公式 Web サイト からインストールします。
- Go 言語の基本的な知識。
インストール
Geziyor をインストールするには、次を実行できます。
bash
go get -u github.com/geziyor/geziyor
基本的な例:Geziyor での Web スクレイピング
以下は、Web サイトをスクレイピングして記事のタイトルを出力する簡単な例です。
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"github.com/PuerkitoBio/goquery"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://news.ycombinator.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find(".storylink").Each(func(i int, s *goquery.Selection) {
log.Println(s.Text())
})
},
}).Start()
}
詳細な例:カスタムヘッダーと POST リクエストを使用したスクレイピング
場合によっては、ログインや動的な Web サイトとの対話など、サーバーとのより複雑な対話をシミュレートする必要がある場合があります。この例では、カスタムヘッダーと POST リクエストを送信する方法を示します。
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
Method: "POST",
URL: "https://httpbin.org/post",
Body: []byte(`{"username": "test", "password": "123"}`),
Headers: map[string]string{
"Content-Type": "application/json",
},
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Geziyor での Cookie とセッションの処理
スクレイピング中に Cookie を管理したり、セッションを維持する必要がある場合があります。Geziyor は、各リクエストの Cookie を自動的に処理することで、Cookie の管理を簡素化します。必要に応じて、Cookie の処理プロセスをカスタマイズすることもできます。
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/cookies/set?name=value",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Cookies:", r.Cookies())
},
}).Start()
}
Geziyor でのプロキシの使用
IP 制限やブロックを回避しながら Web サイトをスクレイピングするには、リクエストをプロキシを経由してルーティングできます。以下は、Geziyor でプロキシサポートを構成する方法です。
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/ip",
Proxy: "http://username:password@proxyserver:8080",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Geziyor での CAPTCHA の処理
Geziyor は CAPTCHA をネイティブに解決しませんが、CapSolver などの CAPTCHA 解決サービスと統合できます。以下は、CapSolver を使用して Geziyor と連携して CAPTCHA を解決する方法です。
例:Geziyor と CapSolver を使用した ReCaptcha V2 の解決
まず、CapSolver を統合し、CAPTCHA チャレンジのリクエストを処理する必要があります。
go
package main
import (
"encoding/json"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
"time"
)
const CAPSOLVER_KEY = "YourKey"
func createTask(url, key string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"task": map[string]interface{}{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url,
"websiteKey": key,
},
}
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/createTask").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
return result["taskId"].(string), nil
}
func getTaskResult(taskId string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"taskId": taskId,
}
for {
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/getTaskResult").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
if result["status"] == "ready" {
return result["solution"].(string), nil
}
time.Sleep(5 * time.Second)
}
}
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
taskId, _ := createTask("https://example.com", "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf")
solution, _ := getTaskResult(taskId)
g.Do(&client.Request{
Method: "POST",
URL: "https://example.com/submit",
Body: []byte(`g-recaptcha-response=` + solution),
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Captcha Solved:", string(r.Body))
},
}).Start()
}
Geziyor でのパフォーマンスの最適化
Geziyor は、大量のスクレイピングタスクの処理に優れていますが、特定のオプションを調整することでパフォーマンスをさらに最適化できます。
- 並行処理:
ConcurrentRequestsを増やすことで、複数のリクエストを同時に実行できます。 - リクエストの遅延: 検出を回避するために、リクエスト間に遅延を設けます。
並行処理と遅延を適用した例:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://example.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {},
ConcurrentRequests: 10,
RequestDelay: 2,
}).Start()
}
ボーナスコード
CapSolver: scrape にて、最高の CAPTCHA ソリューションのためのボーナスコード を請求してください。コードを適用すると、チャージごとに追加で 5% のボーナスが付与され、何度でも使用できます。

まとめ
Geziyor は、Go 用の強力で高速かつ柔軟な Web スクレイピングフレームワークであり、スケーラブルなスクレイピングシステムを構築したい開発者にとって最適な選択肢です。並行処理、カスタマイズ可能なリクエスト、CapSolver などの外部サービスとの統合が組み込まれているため、シンプルで高度なスクレイピングタスクの両方に適したツールとなっています。
ブログ、e コマースサイトからデータを収集する場合でも、カスタムスクレイピングパイプラインを構築する場合でも、Geziyor は迅速かつ効率的に作業を開始するために必要な機能を提供します。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。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

