このリポジトリは、検索エンジン結果ページ(SERP)データを収集するための2つのアプローチを提供します:
- 基本的なデータ収集に適した、無料の小規模Googleスクレイパー
- 主要検索エンジンから大規模かつリアルタイムにデータを収集するための、エンタープライズグレードのAPIソリューション
- Free SERP Scraper
- Limitations
- Bright Data SERP API
- Query Parameters Overview
- Other Settings for SERP API
- Support & Resources
無料スクレイパーでは、小規模なGoogle SERPデータ収集が可能です。
- File: 検索語句を含むテキストファイル(必須)
- Format: 1行に1つの検索語句
Pythonファイル内の以下のパラメータを変更してください:
# free_serp_scraper/google_serp.py
HEADLESS = False
MAX_RETRIES = 2
REQUEST_DELAY = (1, 4)
with open("search_terms.txt", "r", encoding="utf-8") as file:
passGoogleはいくつかのアンチスクレイピング対策を実装しています:
- CAPTCHA: 人間とボットを区別するために使用されます
- IPブロック: 不審なアクティビティに対する一時的または恒久的なBANです
- レート制限: 未識別のリクエストを迅速に検出してブロックします
- ジオターゲティング: 結果は場所、言語、デバイスによって変わります
- ハニーポットトラップ: 自動アクセスを検出するための隠し要素です
Bright DataのSERP APIは、信頼性の高いSERPデータ収集のための堅牢なソリューションを提供します。
- 成功したリクエストごとの従量課金モデル
- 高速なレスポンス時間
- ロケーション別ターゲティング
- 複数のデバイスタイプと検索パラメータをサポート
- 主要検索エンジンをカバー(Google、Bing、DuckDuckGo、Yandex、Baidu、Yahoo、Naver)
- 組み込みのアンチボットソリューション
- 市区町村レベルの精度でリアルタイム結果
- 構造化データ出力(JSON/HTML)
Note: SERP APIはBright Data’s Web Scraping Suiteの一部であり、プロキシ管理、ブロック解除、パース機能をフルで含みます。
- Prerequisites:
- Bright Dataアカウントを作成してください
- API keyを取得してください
- Setting Up SERP API: ステップバイステップガイドに従って、Bright Dataアカウントで新しいSERP APIをセットアップしてください。
- Implementation Methods:
- Direct API Access
- Native Proxy-Based Access
APIを使用する最も簡単な方法は、直接リクエストを送信することです。
cURL Example
curl https://api.brightdata.com/request \
-H "Content-Type: application/json" \
-H "Authorization: Bearer API_TOKEN" \
-d '{
"zone": "ZONE_NAME",
"url": "https://www.google.com/search?q=ollama&brd_json=1",
"format": "raw"
}'Python Example
import requests
import json
url = "https://api.brightdata.com/request"
headers = {"Content-Type": "application/json", "Authorization": "Bearer API_TOKEN"}
payload = {
"zone": "ZONE_NAME",
"url": "https://www.google.com/search?q=ollama&brd_json=1",
"format": "raw",
}
response = requests.post(url, headers=headers, json=payload)
with open("serp_direct_api.json", "w") as file:
json.dump(response.json(), file, indent=4)
print("Response saved to 'serp_direct_api.json'.")👉 完全なJSON出力をご覧ください
Note: パース済みJSONにはbrd_json=1を、パース済みJSON + 完全なネストHTMLにはbrd_json=htmlを使用してください。
パース結果の詳細はこちら: SERP API Parsing Guide
プロキシルーティングを使用する代替方法です。
cURL Example
curl -i \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>:<ZONE_PASSWORD> \
-k \
"https://www.google.com/search?q=ollama"Python Example
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
host = "brd.superproxy.io"
port = 33335
username = "brd-customer-<customer_id>-zone-<zone_name>"
password = "<zone_password>"
proxy_url = f"http://{username}:{password}@{host}:{port}"
proxies = {"http": proxy_url, "https": proxy_url}
url = "https://www.google.com/search?q=ollama"
response = requests.get(url, proxies=proxies, verify=False)
with open("serp_native_proxy.html", "w", encoding="utf-8") as file:
file.write(response.text)
print("Response saved to 'serp_native_proxy.html'.")👉 完全なHTML出力をご覧ください
SSL Certificate: 本番環境ではBright DataのSSL証明書を読み込んでください。詳細はこちら: SSL Certificate Guide
Bright Data SERP APIでは、ローカライズ、ページネーション、デバイスエミュレーションなどのためのクエリパラメータを使用して、Google、Bing、Yandex、DuckDuckGoを含む複数の検索エンジン向けにリクエストをカスタマイズできます。この概要では、APIの機能を高レベルでご紹介します。
すべてのクエリパラメータの完全な一覧と詳細な説明については、Detailed Query Parameters Documentationを参照してください。
SERP APIは、Search、Maps、Trends、Reviews、Lens、Hotels、Flightsなど、さまざまなGoogleサービスをサポートします。以下は各サービスの主要な設定パラメータです:
ローカライズ、検索タイプ、ページネーション、ジオロケーション、デバイスターゲティングのオプションで検索結果をカスタマイズします。
Localization
gl: 検索場所の国コード(例:gl=us)。hl: 結果の言語コード(例:hl=en)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/search?q=pizza&gl=us&hl=en"Search Type:
検索タイプを指定するには**tbm**パラメータを使用します:
- Images:
tbm=isch - Shopping:
tbm=shop - News:
tbm=nws - Videos:
tbm=vid
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/search?q=pizza&tbm=shop"Pagination:
start: 結果のオフセット(最初のページは0、2ページ目は20、など)。num: 1ページあたりの結果数(デフォルトは20)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/search?q=pizza&start=20&num=50"Geolocation:
uule: ジオ固有の結果のためのエンコード済みロケーション文字列
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/search?q=pizza&uule=w+CAIQICINVW5pdGVkK1N0YXRlcw"Device Targeting:
**brd_mobile**パラメータを使用します:
0: Desktop(デフォルト)1: Random mobile- Specific values:
ios(またはiphone)、ipad、android、android_tablet
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/search?q=pizza&brd_mobile=1"座標の指定や宿泊施設タイプのフィルタリングにより、マップクエリをカスタマイズします。
Coordinates:
- 形式:
@latitude,longitude,zoom(例:ズームは3zから21z)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/maps/search/restaurants/@47.30227,1.67458,14.00z"Accommodation Search:
brd_accomodation_type:hotels(デフォルト)vacation_rentals
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/maps/search/hotels+new+york/?brd_accomodation_type=vacation_rentals"期間やウィジェットオプションをカスタマイズしてトレンドデータを取得します。
Required Parameters:
brd_json=1: パース済みJSON結果を返します。brd_trends: ウィジェットを指定します(例:timeseries,geo_map)。
Time Range:
date: 期間を定義します(例:過去1日ならnow 1-d)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://trends.google.com/trends/explore?q=pizza&date=now+1-d&brd_trends=timeseries,geo_map&brd_json=1"feature IDを使用してレビューを取得し、必要に応じて並べ替えます。
Key Parameters:
fid: 検索結果から取得するFeature IDです。sort: 並べ替え順(例:newestFirst、ratingHigh)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<id>-zone-<name>:<pass>" \
"https://www.google.com/reviews?fid=0x808fba02425dad8f&sort=newestFirst"URLまたはファイルアップロードで画像検索を行います。
Image Search:
url: 検索する画像URLです。brd_json=1: 結果をJSONとして返します。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://lens.google.com/uploadbyurl?url=https://example.com/image.jpg&brd_json=1"予約日や通貨オプションでホテル検索をカスタマイズします。
Booking Parameters:
brd_dates: チェックイン日とチェックアウト日(YYYY-MM-DD,YYYY-MM-DD)。brd_currency: 通貨コード(例:USD、EUR)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/travel/hotels?q=hotels+new+york&brd_dates=2022-01-20,2022-02-05"同様のローカライズパラメータを使用してフライトを検索します。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.google.com/travel/flights?q=flights+new+york&gl=us&hl=en"ローカライズ、ジオターゲティング、ページネーション、デバイスおよびブラウザターゲティング、出力形式のオプションを使用してBingクエリを設定します。専用のBing APIもご確認ください。
Localization
setLang: インターフェースの言語(例:setLang=en-US)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&setLang=en-US"Geo-Location
location: 検索の起点(例:location=New+York)。cc: 国コード(例:cc=us)。mkt: マーケットコード(例:mkt=en-US)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&location=New+York&cc=us&mkt=en-US"Pagination
count: 結果数(例:count=50)。first: ページネーション用のオフセット(例:2ページ目はfirst=11)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&count=50&first=11"Filters
safesearch: アダルトコンテンツフィルタ(例:safesearch=off)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&safesearch=off"Device Targeting
brd_mobile: デバイスタイプを指定します(例:モバイルはbrd_mobile=1、またはbrd_mobile=ios)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&brd_mobile=1"Browser Targeting
brd_browser: ブラウザを指定します(例:brd_browser=chrome)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&brd_browser=chrome"Parsing
brd_json: パース済みJSONを返します(例:brd_json=1)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.bing.com/search?q=pizza&brd_json=1"ローカライズ、ページネーション、期間、デバイス/ブラウザターゲティングのパラメータでYandexクエリを簡単に設定します。専用のYandex APIもご確認ください。
Localization
lr: リージョンを指定します(例:米国はlr=84)。lang: ページ言語(例:lang=en)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.yandex.com/search/?text=pizza&lr=84&lang=en"Pagination
p: 結果ページ番号(例:2ページ目はp=2)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.yandex.com/search/?text=pizza&p=2"Time Range
within: 期間を指定します(例:within=1)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.yandex.com/search/?text=pizza&within=1"Device Targeting
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.yandex.com/search/?text=pizza&brd_mobile=1"Browser Targeting
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://www.yandex.com/search/?text=pizza&brd_browser=chrome"ローカライズ、セーフサーチ、期間、デバイス/ブラウザターゲティングを使用したDuckDuckGo検索カスタマイズの概要です。専用のDuckDuckGo APIもご確認ください。
Localization
kl: 国と言語(例:kl=us-en)。kad: インターフェース要素の言語を定義します。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://duckduckgo.com/?q=pizza&kl=us-en"Safe Search
kp: セーフサーチを有効にします(例:kp=1)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://duckduckgo.com/?q=pizza&kp=1"Time Range
df: 期間を指定します(例:df=d)。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://duckduckgo.com/?q=pizza&df=d"Device Targeting
brd_mobile: モバイルデバイスエミュレーション用です。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://duckduckgo.com/?q=pizza&brd_mobile=1"Browser Targeting
brd_browser: ブラウザ(例:chrome)を指定するために使用します。
curl \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<customer-id>-zone-<zone-name>:<zone-password> \
"https://duckduckgo.com/?q=pizza&brd_browser=chrome"- Sync(デフォルト): リアルタイムのレスポンスをすぐに取得します。
- Async: 後で結果を取得します(大量リクエストに最適です)。
詳細はこちら: How Async Works
multiパラメータを使用して、同一のIPアドレスとセッションを共有しつつ、1回のAPI呼び出しで並列クエリを送信します。
multi:[
{"keyword":"shoes","num":50},
{"keyword":"shoes","num":200}
]詳細はこちら: Multiple Queries Guide
- Documentation: SERP API Docs
- Query Parameters Documentation: Detailed Query Parameters Docs
- Other Guides: Web Unlocker API, Google Maps, Google News
- Interesting Read: Best SERP APIs, Build a RAG Chatbot with SERP API, Scrape Google Search with Python
- Technical Support: Contact Us


