httperror build_opener python http urllib2

build_opener - Python''s `urllib2`: ¿Por qué obtengo el error 403 cuando` urlopen` una página de Wikipedia?



urllib2 in python (6)

Algunos sitios web bloquearán el acceso de las secuencias de comandos para evitar el uso "innecesario" de sus servidores al leer los encabezados que envía urllib. No sé ni puedo imaginar por qué wikipedia hace / haría esto, pero ¿ha intentado falsificar sus encabezados?

Tengo un error extraño al tratar de urlopen una página de Wikipedia. Esta es la página:

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

Esta es la sesión de shell:

>>> 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

Esto me sucedió en dos sistemas diferentes en diferentes continentes. ¿Alguien tiene una idea de por qué sucede esto?



Hice una solución para esto utilizando php que no está bloqueado por el sitio que necesitaba.

se puede acceder de esta manera:

path=''http://phillippowers.com/redirects/get.php? file=http://website_you_need_to_load.com'' req = urllib2.Request(path) response = urllib2.urlopen(req) vdata = response.read()

Esto le devolverá el código html


Muchas veces los sitios web filtran el acceso al verificar si un agente de usuario reconocido accede a ellos. Wikipedia simplemente trata su script como un bot y lo rechaza. Prueba el spoofing como navegador. El siguiente enlace le muestra un artículo para mostrarle cómo hacerlo.

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


Para solucionar esto, deberá atrapar esa excepción.

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

Cuando imprimo el mensaje resultante, incluye lo siguiente

"Inglés

Nuestros servidores están experimentando un problema técnico. Esto es probablemente temporal y debería arreglarse pronto. Por favor, inténtelo de nuevo en unos minutos. "


La postura de Wikipedias es :

Recuperación de datos: los Bots no se pueden usar para recuperar contenido masivo para ningún uso que no esté directamente relacionado con una tarea de bot aprobada. Esto incluye la carga dinámica de páginas de otro sitio web, lo que puede ocasionar que el sitio web quede en la lista negra y se le niegue el acceso permanentemente. Si desea descargar contenido en bloque o duplicar un proyecto, hágalo descargando o alojando su propia copia de nuestra base de datos.

Es por eso que Python está bloqueado. Se supone que debes descargar los volcados de datos .

De todos modos, puedes leer páginas como esta en Python 2:

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

O en Python 3:

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