ошибка с функцией разбора в lxml - PullRequest
12 голосов
/ 25 июня 2010

Я установил lxml2.2.2 на платформе Windows (я использую Python версии 2.6.5). Я попробовал эту простую команду:

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

но я получаю следующую ошибку:

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”

Я не знаю, что делать дальше, так как я новичок в Python. пожалуйста, направьте меня, чтобы решить эту ошибку. заранее спасибо!! :)

Ответы [ 3 ]

13 голосов
/ 25 июня 2010

lxml.html.parse не выбирает URL.

Вот как это сделать с 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>

Обновление
Стивен прав.lxml.etree.parse должен принимать и загружать URL-адреса.Я пропустил это.Я пытался удалить этот ответ, но мне не разрешено.

Я отказываюсь от своего утверждения о том, что URL-адреса не извлекаются.

4 голосов
/ 01 июля 2011

Согласно API, он должен работать: http://lxml.de/api/lxml.html-module.html#parse

Это похоже на ошибку в lxml 2.2.2. Я только что протестировал на Windows с Python 2.6 и 2.7, и он работает с 2.3.0.

Итак: обновите свой lxml, и все будет в порядке.

Я не знаю точно, в каких версиях lxml возникает проблема, но я считаю, что проблема была не столько в самом lxml, сколько в версии libxml2, используемой для сборки бинарного файла windows. (в некоторых версиях libxml2 была проблема с http на windows)

3 голосов
/ 12 сентября 2012

Поскольку разрывы строк в комментариях не допускаются, вот моя реализация ответа Мэтта :

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()
...