Эффективный синтаксический анализ сломанного XML / HTML в Python

Я хотел бы иметь возможность эффективно анализировать большие HTML-документы на Python. Мне известно о Fastiter Лизы Дейли и аналогичная концепция в собственном cElementTree Python. Однако ни один из них не обрабатывает сломанный XML, который также читает HTML. Кроме того, документ может содержать другой неработающий XML.

Точно так же мне известны ответы типа this, в которых предлагается вообще не использовать какую-либо форму iterparse, а именно: собственно то, что я использую. Тем не менее, я пытаюсь оптимизировать решение, преодолев самое узкое место в моей программе, а именно синтаксический анализ документов.

Кроме того, я немного поэкспериментировал с использованием обработчика целей в стиле SAX для парсеров lxml - я не уверен, что происходит, но это сразу приводит к тому, что Python перестает работать! Не просто выброс исключения, но и всплывающее сообщение «python.exe перестал работать». Понятия не имею, что здесь происходит, но я даже не уверен, действительно ли этот метод лучше стандартного парсера, потому что я очень мало видел о нем в Интернете.

Таким образом, мой вопрос: есть ли что-нибудь похожее на iterparse, позволяющее мне быстро и эффективно разбирать документ, которое не вызывает раздражения, когда документ не правильно сформирован XML (IE. Имеет восстановление из плохо сформированного XML)?


person Firnagzen    schedule 26.01.2014    source источник
comment
Взгляните на BeautifulSoup.   -  person santosh-patil    schedule 26.01.2014
comment
возможный дубликат stackoverflow.com/questions / 3577652 /   -  person santosh-patil    schedule 26.01.2014
comment
Beautifulsoup очень медленный, насколько я помню! Глядя на этот дубликат: нет, не совсем. Это не просто объекты HTML; это также такие вещи, как && разбросанные по сторонам, которые заставляют синтаксический анализатор XML подходить.   -  person Firnagzen    schedule 26.01.2014


Ответы (1)


Я бы использовал этот.

https://github.com/iogf/ehp

Он быстрее, чем lxml, и обрабатывает сломанные html как.

from ehp import *

doc = '''<html>
<body>
<p> cool </html></body>'''

html = Html()
dom = html.feed(doc)
print dom

Он строит AST в соответствии с максимально возможной структурой HTML. Тогда вы можете работать над AST.

person Unknown Soldier    schedule 20.03.2016