防止lxml触及<script>标记</script>中的数据

时间:2011-06-16 17:22:21

标签: python html-parsing lxml

我正在尝试编写一个修改&lt; script&gt;的内容的python脚本我正在解析的文件中的标记。由于它的速度,我正在使用lxml.html(而不是BeautifulSoup等)。脚本标记的内容包含在注释标记(&lt;! - 和 - &gt;)中:

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

问题是当我尝试像scriptNode.text = '<!-- ...这样的东西时,当我将html写回文件时,lxml将尖括号修改为其html表示(&amp; lt;和&amp; gt;)。我尝试在字符串中转义它们('\&lt; ...'),但这似乎没有帮助。

查看大多数现代网站,看起来不需要那些评论标签。我可以删除它们,但是许多脚本也在其中使用了一些html,如果那些也被修改为HTML表示,那就是一个问题。

我很惊讶lxml正在修改这些数据,最后我听说HTML解析器旨在避免修改/解释&lt; script&gt;中的数据。标签

我可以使用设置/命令来防止这种情况发生吗?

由于

2 个答案:

答案 0 :(得分:4)

将它们放入CDATA section

答案 1 :(得分:0)

我刚刚发现的替代解决方案似乎也可以使用tostring()而不是write():

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

而不是

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

想想我也会在这里发布它,即使我决定使用CDATA,因为它似乎是一个更清晰的解决方案,可以防止将来使用其他解析脚本出现问题。