urllib2 devuelve 404 para un sitio web que se muestra bien en los navegadores

No puedo abrir una URL en particular usando urllib2. El mismo enfoque funciona bien con otros sitios web como “http://www.google.com” pero no con este sitio (que también se muestra bien en el navegador).

mi código simple:

from BeautifulSoup import BeautifulSoup import urllib2 url="http://www.experts.scival.com/einstein/" response=urllib2.urlopen(url) html=response.read() soup=BeautifulSoup(html) print soup 

¿Puede alguien ayudarme a hacer que funcione?

este es el error que tengo

 Traceback (most recent call last): File "/Users/jontaotao/Documents/workspace/MedicalSchoolInfo/src/AlbertEinsteinCollegeOfMedicine_SciValExperts/getlink.py", line 12, in  response=urllib2.urlopen(url); File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open response = meth(req, response) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 432, in error result = self._call_chain(*args) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain result = func(*args) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 619, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open response = meth(req, response) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error return self._call_chain(*args) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain result = func(*args) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 404: Not Found 

Gracias

Acabo de intentar esto y recibí el código 404 y la página de vuelta.

Suponiendo que se trata de la detección de User-Agent, ya sea por accidente o a propósito, no sirve contenido para python urllib.

Aclaración, con urllib , recibí el urlopen devuelto un objeto de respuesta con un código 404 y contenido HTML. Con urllib2.urlopen una excepción urllib2.HTTPError .

Le sugiero que intente configurar su agente de usuario para que se vea como un navegador. Aquí hay una pregunta al respecto: cambio de agente de usuario en urllib2.urlopen

Puedes usar try except para capturar un error

 try: u = urllib2.urlopen(req) except urllib2.HTTPError, e: print e.code print e.msg return 

hm … ¿estás seguro de que la URL es válida? intente “http://www.google.com” Tenía un código similar y no hay problemas con urllib. O puede usar la sentencia try – except para ver los detalles del error. Y, por supuesto, la respuesta de MattH es muy similar a la verdad 🙂