Image

Imagenikon_nlg wrote in Imageru_python

Category:

tidy sucks

Добрый день.

Товарищи, подскажите, пожалуйста, где я туплю?

Задача: построить DOM из невалидного html

Проблема: если страница отдаётся в windows-1251, tidy, который должен из кривой страницы построить нормальную, валится с segmentation fault.

Пример (сайт не тот, но тоже отдаёт 1251):
import urllib
import tidy
from xml.dom import minidom

x = urllib.urlopen("http://avt16.ru")
s = x.read()
options = dict(output_xhtml=1, add_xml_decl=0, indent=1, tidy_mark=0, output_encoding="utf8")
s = str(tidy.parseString(s.decode("windows-1251"), **options))
dom3 =  minidom.parseString(s)
print dom3.toxml()


Если заменить s.decode("windows-1251") на просто s, то minidom строит нормальное дерево, но делает строку юникодной, и в итоге обратный decode не срабатывает.
Без tidy, соответственно, xml.parsers.expat.ExpatError: not well-formed
Есть ли ещё какие-то способы получить на выходе нормальную страницу, которую можно отдать minidom?