错误与lxmlparsing函数

我已经在Windows平台上安装lxml2.2.2(即时通讯使用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的新手。 请指导我解决这个错误。 提前致谢!! 🙂

lxml.html.parse不提取网址。

以下是使用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。

根据api文档,它应该工作: http : //lxml.de/api/lxml.html-module.html#parse

这似乎是lxml 2.2.2中的一个错误。 我刚刚在python 2.6和2.7的窗口测试,它与2.3.0工作。

所以:升级你的lxml,你会没事的。

我不知道在哪个版本的lxml中发生问题,但是我相信问题不在于lxml本身,而是用于构建windows二进制文件的libxml2版本。 (libxml2的某些版本在Windows上有http问题)

由于换行符是不允许的评论,这里是我的执行马特的答案 :

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