Ошибка 429 с простым запросом в Google с запросами Python - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь получить первый не рекламный результат по простому запросу в Google.

res = requests.get('https://www.google.com?q=' + query)

Назначьте любое значение для запроса, и вы получите ошибку. Я попытался добавить несколько заголовков, но ничего не изменилось.

Я попытался добавить все остальные параметры, которые Google обычно связывает с запросом, и снова ничего не меняется.

Нет проблем, если вы делаете поиск с селеном.

Код ошибки - 429, но это, кажется, просто стандартный ответ на этот запрос. Это не имеет никакого отношения к моему IP, и я не спамлю Google, и это не исчезает через некоторое время.

Знаете ли вы, почему это происходит, и есть ли какой-нибудь заголовок, который я могу добавить, или какое-либо другое решение, чтобы просто просмотреть результаты, как если бы вы искали это ключевое слово в Google?

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Поскольку вы получаете status code 429, что означает, что вы отправили слишком много запросов за определенный промежуток времени («ограничение скорости»). Подробнее читайте здесь .

Добавьте заголовки в свой запрос так же, как это:

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)
0 голосов
/ 26 июня 2019

429 Слишком много запросов

HTTP 429 Too Many Requests Код состояния ответа указывает, что пользователь отправил слишком много запросов за определенный промежуток времени («ограничение скорости»). Представления ответа ДОЛЖНЫ включать подробности, объясняющие условие, и МОГУТ содержать заголовок Retry-After, указывающий, сколько времени ждать, прежде чем сделать новый запрос.

Когда сервер подвергается атаке или просто получает очень большое количество запросов от одной стороны, ответ на каждый из них кодом состояния 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 (не найдено) с ChromeDriver Chrome через Selenium

...