【问题标题】:Parsing HTML: lxml error in Python解析 HTML:Python 中的 lxml 错误
【发布时间】:2011-05-21 05:42:08
【问题描述】:

我正在编写一个简单的脚本来从here 获取灰色大表。

我的代码如下:

import urllib2
from lxml import etree

html = urllib2.urlopen("http://www.afi.com/100years/movies10.aspx").read()

root = etree.XML(html)

但我在最后一条语句中遇到了错误。

Traceback (most recent call last):
  File "D:\Workspace\afi100\afi100.py", line 13, in <module>
    root = etree.XML(html)
  File "lxml.etree.pyx", line 2720, in lxml.etree.XML (src/lxml/lxml.etree.c:52577)
  File "parser.pxi", line 1556, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:79602)
  File "parser.pxi", line 1435, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:78449)
  File "parser.pxi", line 943, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:75099)
  File "parser.pxi", line 547, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:71467)
  File "parser.pxi", line 628, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:72340)
  File "parser.pxi", line 568, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:71683)
XMLSyntaxError: Space required after the Public Identifier, line 3, column 59

知道如何解决这个错误吗?

谢谢。

【问题讨论】:

  • 您认为使用 XML 解析器解析 HTML 是个好主意吗?
  • 您应该使用任何可用的 HTML 到 XML (xhtml) 工具。
  • 我误以为 HTML 是 XML 的子集(它不是,但 XHTML 是)。 techforum4u.com/content.php/… 对主要差异有很好的描述

标签: python html-parsing lxml


【解决方案1】:

您链接到的文档不是格式正确的 XHTML,因此您不能使用 XML 解析器来加载它。

您必须改用 Beautiful Soup 之类的 HTML 解析器。

【讨论】:

  • 感谢您的回复。 libxml2dom 会代替工作吗?我以前用过。
  • @nunos,可能不是,因为它绑定到 libxml2 库,据我所知,它只可靠地支持格式良好的 XML。
  • 虽然您可以使用 Beautiful Soup,但 lxml 也可以处理 HTML(参见 koblas 接受的答案)。
【解决方案2】:

您正在尝试使用 XML 解析器解析 HTML,您应该使用 lxml HTML 解析器。

import urllib2
from StringIO import StringIO
from lxml import etree

ufile = urllib2.urlopen("http://www.afi.com/100years/movies10.aspx")

root = etree.parse(ufile, etree.HTMLParser())

print etree.tostring(root)

【讨论】:

  • 有趣,这是一个真正的 HTML 解析器还是只设置 libxml2 的恢复标志?
猜你喜欢
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多