2015-06-27 3 views
0

Я работаю с html и использую lxml для его анализа. В целях тестирования у меня есть html-документ, сохраненный как строка в файле python с кодировкой = utf-8 вверху.Как сообщить lxml, какую кодировку использовать?

Всякий раз, когда я пытаюсь разобрать html с помощью lxml, я получаю странные кодировки html, если в html нет тега <meta charset="utf-8">.

Это код:

t = lxml.html.fromstring(page_html) 
print lxml.html.tostring(t) 

Если page_html строка содержит мета кодовую выше метода tostring() возвращает хорошо закодированы HTML (т.е. превращается в &#8217;). Если он не имеет его, результаты искажены (т.е. превращается в &#226;&#128;&#153;)

Это кодирование происходит в методе fromstring, а не tostring один, так что я не могу просто вставить новый мета элемент в дереве после него создается к тому времени, когда к концу этого времени.

Единственное решение, о котором я могу думать, это попытаться изменить исходную строку html и добавить там метатег до создания дерева. Однако это похоже на klunky. Разве нет лучшего способа сделать это с помощью lxml?

ответ

0

Оказывается, мне просто нужно передать пользовательский парсер методу fromstring. Так это исправление:

parser = html.HTMLParser(encoding="utf-8") 
t = lxml.html.fromstring(page_html, parser=parser) 
print lxml.html.tostring(t) 
Смежные вопросы