2012-09-06 15 views
8

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).urllib2 devuelve 404 para un sitio web que se muestra bien en los navegadores

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

+1

¿Cuál es el error que se obtiene? –

+3

Deja de poner punto y coma al final de tus líneas. Esto es Python. – FogleBird

+0

Mi error fue sobre cómo obtener los parámetros, pero creo que no es tu problema –

Respuesta

8

que acaba de intentar esto y recibió 404 de código y última página.

Supongo que está haciendo la detección de agente de usuario que, por accidente o a propósito, no proporciona contenido a pyllur urlib.

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

Le sugiero que intente configurar su User Agent para que se parezca a un navegador. Hay una pregunta al respecto aquí: Changing user agent on urllib2.urlopen

+0

Esta fue mi suposición también, me ganaste. – FogleBird

0

hm ... ¿está seguro de que la URL es válida? intente con "http://www.google.com". Tengo un código similar y no hay problemas con urllib. O puede usar la declaración try - except para ver los detalles del error. Y, por supuesto, la respuesta de MATTH es muy similar a la verdad :)

3

Puede utilizar try except para capturar un error

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