Googleの単純なクエリに最初の非広告の結果を得ようとしています。
_res = requests.get('https://www.google.com?q=' + query)
_
クエリに任意の値を割り当て、エラーが発生します。私はいくつかのヘッダーを追加しようとしましたが、何も変化しません。
Googleが通常クエリに関連付けられ、もう一度何も変更に関連していない他のすべてのパラメータを追加しようとしました。
Seleniumで検索を行う場合は問題ありません。
エラーコードは429ですが、これはこのクエリに対する標準的な応答であるようです。私のIPとは何の関係もありません。私はGoogleをスパムしていません。
これが起こる理由を知っていますか。
HTTP 429リクエストが多すぎる 応答ステータスコードは、ユーザーが指定された時間内にあまりにも多くの要求を送信したことを示します( "Rate Limiting")。応答表現は、条件を説明する詳細を含み、新しい要求をする前に待機する時間を示す_Retry-After
_ヘッダを含むことがあります。
サーバーが攻撃中または単一の当事者から非常に多数の要求を受信しているときは、a_429
_ステータスコードをそれぞれ応答するときリソースを消費します。したがって、サーバーは_429
_ステータスコードを使用する必要はありません。リソース使用量を制限するときは、接続を削除するだけでなく、または他の手順を実行することがより適切かもしれません。
ただし、同じテストをコーディングして実行したときに、次のように完璧な結果が得られました。
コードブロック:
_import requests
query = "Selenium"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
url = 'https://www.google.com?q=' + query
res = requests.get(url, headers=headers)
print(res)
_
コンソール出力:
_<Response [200]>
_
関連するディスカッションは リソースのロードに失敗しました:サーバーは429のステータス(リクエストが多すぎます)、404(見つかりません)ChromeからSeleniumを_ ==
status code 429
を取得しているので、これはあなたが与えられた時間内にあまりにも多くの要求を送信したことを意味します( "Rate Lifiting")。より詳細に読む ここ 。
このような要求にヘッダーを追加します。
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)\
AppleWebKit/537.36 (KHTML, like Gecko) Cafari/537.36'}
そのため、最終的な要求は次のとおりです。
url = 'https://www.google.com?q=' + query
res = requests.get(url, headers=headers)