Предотвратить lxml от прикосновения к данным в тегах <script> - PullRequest
3 голосов
/ 16 июня 2011

Я пытаюсь написать скрипт на python, который изменяет содержимое тега в файлах, которые я анализирую.Я использую lxml.html (в отличие от BeautifulSoup и т. Д.) Из-за его скорости.Содержимое тега скрипта заключено в теги комментария ():

<script>
<!--
...
-->
</script>

Проблема в том, что когда я пытаюсь что-то наподобие scriptNode.text = '<!-- ..., lxml изменяет угловые скобки в своих представлениях html (& lt; и & gt;), когда я записываю html обратно в файл.Я пытался экранировать их в строке ('\ <...'), но, похоже, это не помогло. </p>

Глядя на большинство современных веб-сайтов, похоже, что эти теги комментариев не нужны.Я могу удалить их, но многие из сценариев также используют некоторые html-файлы внутри них, и если они тоже изменяются в своем представлении HTML, это проблема.

Я удивлен, что lxml вообще изменяет эти данныеПоследнее, что я слышал, HTML-парсеры предназначены для того, чтобы избежать изменения / интерпретации данных в тегах .

Есть ли настройка / команда, которую я могу использовать, чтобы предотвратить это?

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Поместите их в секцию CDATA .

0 голосов
/ 16 июня 2011

Альтернативное решение, которое я только что обнаружил и которое, кажется, тоже работает, использует tostring () вместо write ():

main = open('file.html', 'w')
main.write(lxml.html.tostring(htmlTree))
main.close()

вместо

htmlTree.write('file.html', pretty_print=False)

Полагаю, я бы также разместил его здесь, хотя я решил использовать CDATA, поскольку это более чистое решение, которое в будущем предотвратит проблемы с другими скриптами синтаксического анализа.

...