2014-12-19 136 views
0

我想解析www.amazon.com源HTML如下使用XML minidom。XML minidom解析错误

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

能有人请解释这意味着什么,以及如何摆脱它。

回答

0

这意味着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