2014-12-19 5 views
0

Я пытаюсь разобрать www.amazon.com источник HTML следующим образом, используя xml minidom.Ошибка XML-анализа 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 придав ему исходный код. Я получаю следующую ошибку при выполнении.

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, например. BeautifulSoup, lxml.html и т. Д.

Смежные вопросы