Почему Google Search возвращает ошибку HTTP 403? - PullRequest
18 голосов
/ 02 марта 2009

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

 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 ]

26 голосов
/ 13 мая 2009

это должно сработать

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
25 голосов
/ 02 марта 2009

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

2 голосов
/ 04 ноября 2010

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

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

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

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

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

0 голосов
/ 02 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...