【问题标题】:error with parse function in lxmllxml中的解析函数错误
【发布时间】:2011-03-08 04:09:40
【问题描述】:

我已经在 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 的新手。请指导我解决此错误。提前致谢!! :)

【问题讨论】:

    标签: python windows parsing lxml


    【解决方案1】:

    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 的声明。

    【讨论】:

    • 对不起,但它确实(或至少应该)获取网址。一定有别的原因。也许先尝试升级到最新的 lxml 版本。
    【解决方案2】:

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

    这似乎是 lxml 2.2.2 中的一个错误。我刚刚使用 python 2.6 和 2.7 在 windows 上进行了测试,它确实适用于 2.3.0。

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

    我不确切知道问题出现在哪个版本的 lxml 中,但我相信问题不在于 lxml 本身,而在于用于构建 windows 二进制文件的 libxml2 版本。 (某些版本的 libxml2 在 windows 上存在 http 问题)

    【讨论】:

    • 你确实知道这个问题是在一年前提出的,是吗?找到解决方法了吗?
    • @MattH:嗯,不,我没有。感谢提及。不知何故,它在我的 Google 阅读器提要中显示为新的(仍然显示“2011 年 6 月 30 日”),我没有仔细看...
    • 那么如果我仍然有这个错误,并且yolk -l | grep lxml 返回lxml - 2.3 - active 那是什么意思?
    • @MattH:这个答案很有帮助;只需要一个错误报告的链接,拜托。 ;-)
    【解决方案3】:

    由于 cmets 中不允许换行,这是我对 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()
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多