マーケティングの指標の一つとしてGoogle Trendなどでの検索ボリュームをを取得したい場合に、pytrendsというライブラリで数値を取得できます。
このpytrendsは「TooManyRequestsError」のエラーが出やすく、その対処法についての備忘です。
【エラーメッセージ】
The request failed: Google returned a response with code 429
初回の取得が成功しない場合
Googleのボット検知システムが悪さをしているようです。実際のブラウザがGoogleトレンドとやり取りする際に生成されるヘッダーを活用してカモフラージュします。
curlを取得する
- Google Trendのサイトにアクセスし、「F12」キーもしくは「右クリック >検証」でブラウザの開発者ツールを立ち上げます。
- 実際に適当なワードのトレンドを検索します
- 開発者ツールのネットワークタブを選択する(下図①)とサーバーとのデータのやり取りが表示されます。
- フィルタで「/trends/explore」で絞り込みをします(下図②)
- 対象のファイル(下図③)を右クリック、「コピー > cURL(bash)としてコピー」を選択します。

headerを抽出する
下記のコードでcurlからheader要素のみ抽出します。
curl_input = """
#コピーしたcurlを貼り付けてください。
curl 'https://trends.google.co.jp/trends/explore?q=python&date=now%201-d&geo=JP&hl=ja' \
-H 'accept: text/html,・・・
・・・
・・・
・・・
・・・
"""
#curlの整形
import re
def extract_headers_from_curl(curl_command: str):
pattern = r"""-H\s+'([^']+)'"""
raw_headers = re.findall(pattern, curl_command)
headers = {}
for line in raw_headers:
# 最初の : を区切り文字とする(以降のコロンは値とみなす)
if ':' in line:
key, value = line.split(':', 1)
key = key.strip()
value = value.strip()
# ヘッダー名の妥当性チェック(空白や制御文字がないか)
if key and all(c.isprintable() and c not in '\r\n\t' for c in key):
headers[key] = value
else:
print(f"⚠ 無効なヘッダー名が検出されたためスキップ: {key}")
else:
print(f"⚠ 無効なヘッダー形式(コロンなし): {line}")
return headers
# ヘッダー抽出
headers = extract_headers_from_curl(curl_input)
_get_data メソッドをオーバーライドする
from pytrends.request import TrendReq as UTrendReq
GET_METHOD='get'
import requests
class TrendReq(UTrendReq):
def _get_data(self, url, method=GET_METHOD, trim_chars=0, **kwargs):
return super()._get_data(url, method=GET_METHOD, trim_chars=trim_chars, headers=headers, **kwargs)
APIを利用する
# API Connection
pytrends = TrendReq(hl='ja-JP', tz=540)
# キーワードを設定
kw_list = ["python"]
pytrends.build_payload(kw_list, timeframe='2020-01-01 2025-04-30', geo='JP')
df = pytrends.interest_over_time()
df.plot(figsize=(15, 3), lw=.7)
一度この処理をすればそのあとのエラーの発生はなくなりました。
利用途中でエラーが発生する場合
単純にリクエスト数が多すぎてエラーが発生すると考えられます。python環境の中のrequest.pyの内容を書き換えます。
C:\Users\##ユーザー名##\AppData\Local\Programs\Python\Python313\Lib\site-packages\pytrends/request.py
request.py の75行目付近と88行目付近にある「requests.get(」を「requests.post(」に書き換えます。
return dict(filter(lambda i: i[0] == 'NID', requests.get(
return dict(filter(lambda i: i[0] == 'NID', requests.post(
再度インポートしなおして利用すれば解決しました。