Skip to content

大規模でリアルタイムな検索エンジン結果の抽出に対応した、エンタープライズグレードの Bright Data SERP API です。

Notifications You must be signed in to change notification settings

bright-jp/serp-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SERP API

Promo

このリポジトリは、検索エンジン結果ページ(SERP)データを収集するための2つのアプローチを提供します:

  1. 基本的なデータ収集に適した、無料の小規模Googleスクレイパー
  2. 主要検索エンジンから大規模かつリアルタイムにデータを収集するための、エンタープライズグレードのAPIソリューション

Table of Contents

Free SERP Scraper

無料スクレイパーでは、小規模なGoogle SERPデータ収集が可能です。

google-search

Input Parameters

  • File: 検索語句を含むテキストファイル(必須)
  • Format: 1行に1つの検索語句

Implementation

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:
    pass

Sample Output

google-serp-data

Limitations

Googleはいくつかのアンチスクレイピング対策を実装しています:

  1. CAPTCHA: 人間とボットを区別するために使用されます
  2. IPブロック: 不審なアクティビティに対する一時的または恒久的なBANです
  3. レート制限: 未識別のリクエストを迅速に検出してブロックします
  4. ジオターゲティング: 結果は場所、言語、デバイスによって変わります
  5. ハニーポットトラップ: 自動アクセスを検出するための隠し要素です

Bright Data SERP API

Bright DataのSERP APIは、信頼性の高いSERPデータ収集のための堅牢なソリューションを提供します。

Key Features

  • 成功したリクエストごとの従量課金モデル
  • 高速なレスポンス時間
  • ロケーション別ターゲティング
  • 複数のデバイスタイプと検索パラメータをサポート
  • 主要検索エンジンをカバー(Google、Bing、DuckDuckGo、Yandex、Baidu、Yahoo、Naver)
  • 組み込みのアンチボットソリューション
  • 市区町村レベルの精度でリアルタイム結果
  • 構造化データ出力(JSON/HTML)

Note: SERP APIBright Data’s Web Scraping Suiteの一部であり、プロキシ管理、ブロック解除、パース機能をフルで含みます。

Getting Started

  1. Prerequisites:
  2. Setting Up SERP API: ステップバイステップガイドに従って、Bright Dataアカウントで新しいSERP APIをセットアップしてください。
  3. Implementation Methods:
    1. Direct API Access
    2. Native Proxy-Based Access

Direct API 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

Native Proxy-Based Access

プロキシルーティングを使用する代替方法です。

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

Query Parameters Overview

Bright Data SERP APIでは、ローカライズ、ページネーション、デバイスエミュレーションなどのためのクエリパラメータを使用して、Google、Bing、Yandex、DuckDuckGoを含む複数の検索エンジン向けにリクエストをカスタマイズできます。この概要では、APIの機能を高レベルでご紹介します。

すべてのクエリパラメータの完全な一覧と詳細な説明については、Detailed Query Parameters Documentationを参照してください。

Google

SERP APIは、SearchMapsTrendsReviewsLensHotelsFlightsなど、さまざまなGoogleサービスをサポートします。以下は各サービスの主要な設定パラメータです:

1. Google Search

ローカライズ、検索タイプ、ページネーション、ジオロケーション、デバイスターゲティングのオプションで検索結果をカスタマイズします。

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)、ipadandroidandroid_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"

2. Google Maps

座標の指定や宿泊施設タイプのフィルタリングにより、マップクエリをカスタマイズします。

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"

3. Google Trends

期間やウィジェットオプションをカスタマイズしてトレンドデータを取得します。

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"

4. Google Reviews

feature IDを使用してレビューを取得し、必要に応じて並べ替えます。

Key Parameters:

  • fid: 検索結果から取得するFeature IDです。
  • sort: 並べ替え順(例:newestFirstratingHigh)。
curl \
  --proxy brd.superproxy.io:33335 \
  --proxy-user "brd-customer-<id>-zone-<name>:<pass>" \
  "https://www.google.com/reviews?fid=0x808fba02425dad8f&sort=newestFirst"

5. Google Lens

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"

6. Google Hotels

予約日や通貨オプションでホテル検索をカスタマイズします。

Booking Parameters:

  • brd_dates: チェックイン日とチェックアウト日(YYYY-MM-DD,YYYY-MM-DD)。
  • brd_currency: 通貨コード(例:USDEUR)。
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"

7. Google Flights

同様のローカライズパラメータを使用してフライトを検索します。

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クエリを設定します。専用の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クエリを簡単に設定します。専用の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検索カスタマイズの概要です。専用の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"

Other Settings for SERP API

Asynchronous Requests

  • Sync(デフォルト): リアルタイムのレスポンスをすぐに取得します。
  • Async: 後で結果を取得します(大量リクエストに最適です)。

詳細はこちら: How Async Works

Multi-Query Requests

multiパラメータを使用して、同一のIPアドレスとセッションを共有しつつ、1回のAPI呼び出しで並列クエリを送信します。

multi:[
  {"keyword":"shoes","num":50},
  {"keyword":"shoes","num":200}
]

詳細はこちら: Multiple Queries Guide

Support & Resources

About

大規模でリアルタイムな検索エンジン結果の抽出に対応した、エンタープライズグレードの Bright Data SERP API です。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published