【问题标题】:XML minidom parsing errorXML minidom 解析错误
【发布时间】:2015-02-18 07:32:30
【问题描述】:

我正在尝试使用 xml minidom 解析 www.amazon.com 源 HTML,如下所示。

def start_parser(self, analysis_id, url):
    dom = None
    path = self.create_analysis_folder(analysis_id)
    self.get_generated_html(url)
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith('.html'):
                dom = parseString(open(path + '/' +file).read())
                shutil.rmtree(os.getcwd())
        break
    return dom

该方法执行一些基本的文件夹操作,然后调用parseString 并为其提供html 源代码。执行时出现以下错误。

xml.parsers.expat.ExpatError: not well-formed (invalid token): line 20, column 20

谁能解释一下这是什么意思以及如何摆脱它。

【问题讨论】:

    标签: python xml html-parsing minidom


    【解决方案1】:

    这意味着 HTML 不是有效的 XML,因此无法解析。格式良好的文档描述为here

    在文档源中发现了无效标记 - 查看 HTML 数据以了解导致问题的字符 - 可能是未转义字符,例如& 而不是 &。由于您解析的 HTML 不是您编写的,因此您可能会遇到其他问题,例如不匹配的结束标签等。

    >>> from xml.dom.minidom import parseString
    
    >>> parseString('<html></html>')
    <xml.dom.minidom.Document instance at 0x7fc804d02ab8>
    
    >>> parseString('<html>&</html>')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib64/python2.7/xml/dom/minidom.py", line 1931, in parseString
        return expatbuilder.parseString(string)
      File "/usr/lib64/python2.7/xml/dom/expatbuilder.py", line 940, in parseString
        return builder.parseString(string)
      File "/usr/lib64/python2.7/xml/dom/expatbuilder.py", line 223, in parseString
        parser.Parse(string, True)
    xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 7
    

    您应该使用 HTML 解析器,例如BeautifulSouplxml.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多