2010-06-25 18 views
12

he instalado lxml2.2.2 en la plataforma de Windows (im utilizando Python versión 2.6.5) .i trató este simple comando:error en función de análisis en lxml

from lxml.html import parse 
p= parse(‘http://www.google.com’).getroot() 

pero yo estoy recibiendo el siguiente error:

Traceback (most recent call last): 
File “”, line 1, in p=parse(‘http://www.google.com’).getroot() 
File “C:\Python26\lib\site-packages\lxml-2.2.2-py2.6-win32.egg\lxml\html_init_.py”, line 661, in parse return etree.parse(filenameorurl, parser, baseurl=baseurl, **kw) 
File “lxml.etree.pyx”, line 2698, in lxml.etree.parse (src/lxml/lxml.etree.c:49590) 
File “parser.pxi”, line 1491, in lxml.etree.parseDocument (src/lxml/lxml.etree.c:71205) File “parser.pxi”, line 1520, in lxml.etree.parseDocumentFromURL (src/lxml/lxml.etree.c:71488) 
File “parser.pxi”, line 1420, in lxml.etree.parseDocFromFile (src/lxml/lxml.etree.c:70583) 
File “parser.pxi”, line 975, in lxml.etree.BaseParser.parseDocFrom 
File (src/lxml/lxml.etree.c:67736) 
File “parser.pxi”, line 539, in lxml.etree.ParserContext.handleParseResultDoc (src/lxml/lxml.etree.c:63820) 
File “parser.pxi”, line 625, in lxml.etree.handleParseResult (src/lxml/lxml.etree.c:64741) 
File “parser.pxi”, line 563, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64056) 
IOError: Error reading file ‘http://www.google.com’: failed to load external entity “http://www.google.com” 

no tengo ni idea de qué hacer a continuación, ya que soy un novato de pitón. por favor, guíame para resolver este error. ¡¡gracias por adelantado!! :)

Respuesta

12

lxml.html.parse no recupera las URL.

Así es como hacerlo con urllib2:

>>> from urllib2 import urlopen 
>>> from lxml.html import parse 
>>> page = urlopen('http://www.google.com') 
>>> p = parse(page) 
>>> p.getroot() 
<Element html at 1304050> 

actualización
Steven es correcto. lxml.etree.parse debería aceptar y cargar URL. Me lo perdí. Intenté borrar esta respuesta, pero no estoy permitido.

Me retracto de mi afirmación de que no está buscando URL.

+0

muchas gracias por aclarar !! esto funciona muy bien:) – silentNinJa

+0

¡De nada! – MattH

+1

Lo sentimos, pero lo hace (o al menos debería) obtener URL también. Debe haber alguna otra razón. Tal vez intente actualizar primero a la última versión de lxml. – Steven

4

De acuerdo con la documentación de la API que debería funcionar: http://lxml.de/api/lxml.html-module.html#parse

Esto parece ser un error en lxml 2.2.2. Acabo de probar en Windows con Python 2.6 y 2.7 y funciona con 2.3.0.

Por lo tanto, actualice su lxml y estará bien.

No sé exactamente en qué versiones de lxml se produce el problema, pero creo que el problema no fue tanto con lxml en sí, sino con la versión de libxml2 utilizada para compilar el binario de Windows. (Ciertas versiones de libxml2 tenían un problema con http en las ventanas)

+0

Te das cuenta de que la pregunta fue hecha hace más de un año, ¿sí? Y se encontró una solución alternativa? – MattH

+0

@MattH: eh, no, no lo hice. Gracias por mencionar De alguna manera apareció como nuevo en mi feed de Google Reader (todavía muestra "30 de junio de 2011"), y no miré más de cerca ... – Steven

+0

Entonces, si todavía tengo este error, y 'yolk -l | grep lxml' devuelve 'lxml - 2.3 - active' ¿Qué significa eso? –

3

Desde saltos de línea no están permitidos en los comentarios, aquí está mi aplicación de MattH's answer:

from urllib2 import urlopen 
from lxml.html import parse 

site_url = ('http://www.google.com') 

try: 
    page = parse(site_url).getroot() 
except IOError: 
    page = parse(urlopen(site_url)).getroot()