Я бы держался подальше от lxml
, это слишком капризно на мой вкус. Я бы попробовал html5lib
на вашем месте. Он не только анализирует html, но и исправляет ошибки, которые вы видите в супе тега, известном как недействительный html.
Он даже имеет режим эмуляции BeautifulSoup, генерируя дерево разбора в форме Beautiful Soup, чтобы упростить перенос старого кода:
import html5lib
from html5lib import treebuilders
f = open("mydocument.html")
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
minidom_document = parser.parse(f)