Почему поиск Google возвращает ошибку HTTP 403?

рассмотрим следующий код:

 30    url = "http://www.google.com/search?hl=en&safe=off&q=Monkey"
 31    url_object = urllib.request.urlopen(url);
 32    print(url_object.read());

когда это выполняется, возникает исключение:

File "/usr/local/lib/python3.0/urllib/request.py", line 485, in http_error_default
   raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

однако, когда это помещается в браузер, поиск возвращается, как ожидалось. Что здесь происходит? Как я могу преодолеть это, чтобы я мог искать Google программно?

какие мысли?

4 ответов


Если вы хотите сделать поиск Google "правильно" через интерфейс программирования, взгляните на Google Api. Это не только официальный способ поиска Google, они также вряд ли изменятся, если Google изменит макет страницы результатов.


это должно сделать трюк

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'

url = "http://www.google.com/search?hl=en&safe=off&q=Monkey"
headers={'User-Agent':user_agent,} 

request=urllib2.Request(url,None,headers) //The assembled request
response = urllib2.urlopen(request)
data = response.read() // The data u need

As lacqui предложил на API Google - это то, как они хотят, чтобы вы делали запросы из кода. К сожалению, я обнаружил, что их документация была направлена на людей, пишущих веб-страницы AJAX, а не на необработанные HTTP-запросы. Я использовал Заголовки LiveHTTP чтобы отследить HTTP-запросы, которые сделали образцы, и я нашел сообщение в блоге ddipaolo полезная.

еще одна вещь, которая меня испортила: они ограничивают вас первые 64 результаты из запроса. Обычно это не проблема, если вы просто предоставляете веб-пользователям поле поиска, но не полезно, если вы пытаетесь использовать Google для интеллектуального анализа данных. Думаю, они не хотят, чтобы вы занимались интеллектуальным анализом данных с помощью их API. Это число 64 изменилось с течением времени и варьируется между поисковыми продуктами.

обновление: похоже, они определенно не хотят, чтобы вы занимались интеллектуальным анализом данных. В конце концов, вы получите ошибку 403 со ссылкой на эту доступ к API уведомление.

пожалуйста, ознакомьтесь с условиями использования API(ов), которые вы используете (связаны в правой боковой панели) и убедитесь в соответствии. Вполне вероятно, что мы заблокировали Вас за одно из следующих нарушений условий использования: мы получили автоматические запросы, такие как выскабливание и предварительная выборка. Автоматические запросы запрещены; все запросы должны быть сделаны в результате действий пользователей.

Они также перечисляют другие нарушения, но я думаю, что это тот, который сработало для меня. Возможно, мне придется исследовать службу босса Yahoo. Кажется, у него не так много ограничений.


ты делаешь это слишком часто. У Google есть ограничения, чтобы предотвратить завал поисковых ботов. Вы также можете попробовать установить user-agent на что-то, что больше напоминает обычный браузер.