Python `urllib2`: Почему я получаю ошибку 403, когда я` urlopen` на странице Википедии?

У меня есть странная ошибка при попытке urlopen определенную страницу из Википедии. Это страница:

http://en.wikipedia.org/wiki/OpenCola_(drink)

Это сеанс оболочки:

 >>> f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)') Traceback (most recent call last): File "C:\Program Files\Wing IDE 4.0\src\debug\tserver\_sandbox.py", line 1, in <module> # Used internally for debug sandbox under external interpreter File "c:\Python26\Lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "c:\Python26\Lib\urllib2.py", line 397, in open response = meth(req, response) File "c:\Python26\Lib\urllib2.py", line 510, in http_response 'http', request, response, code, msg, hdrs) File "c:\Python26\Lib\urllib2.py", line 435, in error return self._call_chain(*args) File "c:\Python26\Lib\urllib2.py", line 369, in _call_chain result = func(*args) File "c:\Python26\Lib\urllib2.py", line 518, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 403: Forbidden 

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

5 Solutions collect form web for “Python `urllib2`: Почему я получаю ошибку 403, когда я` urlopen` на странице Википедии?”

Позиция Википедии :

Поиск данных: боты не могут использоваться для извлечения массового содержимого для любого использования, не связанного напрямую с утвержденной бот-задачей. Это включает в себя динамическую загрузку страниц с другого веб-сайта, что может привести к тому, что веб-сайт будет занесен в черный список и будет окончательно лишен доступа. Если вы хотите загрузить объемный контент или зеркалировать проект, сделайте это, загрузив или разместив собственную копию нашей базы данных.

Вот почему Python заблокирован. Вы должны загрузить дампы данных .

В любом случае, вы можете читать такие страницы в Python 2:

 req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) con = urllib2.urlopen( req ) print con.read() 

Или в Python 3:

 import urllib req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"}) con = urllib.request.urlopen( req ) print con.read() 

Чтобы отладить это, вам нужно отловить это исключение.

 try: f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)') except urllib2.HTTPError, e: print e.fp.read() 

Когда я печатаю полученное сообщение, оно включает следующее

"Английский

Наши серверы в настоящее время испытывают технические проблемы. Это, вероятно, временное явление и должно быть исправлено в ближайшее время. Пожалуйста, повторите попытку через несколько минут. "

Часто веб-сайты фильтруют доступ, проверяя, доступны ли они с помощью распознанного пользовательского агента. Википедия просто рассматривает ваш сценарий как бота и отвергает его. Попробуйте спуфинг в качестве браузера. В следующей ссылке вы найдете статью, чтобы показать вам, как это сделать.

http://wolfprojects.altervista.org/changeua.php

Некоторые веб-сайты блокируют доступ к скриптам, чтобы избежать «ненужного» использования их серверов, читая заголовки urllib. Я не знаю и не могу представить, почему wikipedia делает / будет делать это, но вы пробовали подделывать свои заголовки?

Как упоминал Йохен Ритцел, Википедия блокирует ботов.

Тем не менее, боты не будут заблокированы, если они будут использовать PHP api. Чтобы получить страницу Википедии под названием «любовь»:

http://en.wikipedia.org/w/api.php?format=json&action=query&titles=love&prop=revisions&rvprop=content

  • Интерфейс Python для PayPal - urllib.urlencode не-ASCII-символы с ошибкой
  • Python Ссылка на файл Iterator не итерации
  • Как отправить Multipart / связанные запросы в Python на SOAP-сервер?
  • Python urllib2 с продолжением
  • Как правильно разобрать HTML в кодировке UTF-8 в строки Unicode с помощью BeautifulSoup?
  • Urllib2 работает нормально, если я запускаю программу самостоятельно, но бросает ошибку, когда добавляю ее в cronjob
  • Использование urllib2 с прокси SOCKS
  • Выполнение процедуры urllib2 urlopen в Python 2.4
  • python: urllib2 как отправить cookie с запросом urlopen
  • Использование urllib и BeautifulSoup для извлечения информации из Интернета с помощью Python
  • HTTPS войти в систему с urllib2
  • Python - лучший язык программирования в мире.