データ分析

pytrendsのcode429エラーの原因と対処法まとめ

※当サイトはアフィリエイト広告を利用しています

データ分析

マーケティングの指標の一つとしてGoogle Trendなどでの検索ボリュームをを取得したい場合に、pytrendsというライブラリで数値を取得できます。
このpytrendsは「TooManyRequestsError」のエラーが出やすく、その対処法についての備忘です。

【エラーメッセージ】
The request failed: Google returned a response with code 429

初回の取得が成功しない場合

Googleのボット検知システムが悪さをしているようです。実際のブラウザがGoogleトレンドとやり取りする際に生成されるヘッダーを活用してカモフラージュします。

curlを取得する

  1. Google Trendのサイトにアクセスし、「F12」キーもしくは「右クリック >検証」でブラウザの開発者ツールを立ち上げます。
  2. 実際に適当なワードのトレンドを検索します
  3. 開発者ツールのネットワークタブを選択する(下図①)とサーバーとのデータのやり取りが表示されます。
  4. フィルタで「/trends/explore」で絞り込みをします(下図②)
  5. 対象のファイル(下図③)を右クリック、「コピー > 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(

再度インポートしなおして利用すれば解決しました。

この記事を読んだ人がよく見ています

タイトルとURLをコピーしました