防止lxml处理<script>标签中的数据

3 投票
2 回答
1009 浏览
提问于 2025-04-16 19:43

我正在尝试写一个Python脚本,用来修改我正在解析的文件中<script>标签的内容。我选择使用lxml.html(而不是BeautifulSoup等)是因为它速度更快。<script>标签的内容被注释标签(<!-- 和 -->)包围:

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

问题是,当我尝试像这样做 scriptNode.text = '<!-- ... 时,lxml会把尖括号转换成它们的HTML表示形式(& lt; 和 & gt;),当我把HTML写回文件时就出现了这个问题。我尝试在字符串中转义它们('\< ...'),但这似乎没有帮助。

从大多数现代网站来看,这些注释标签似乎并不是必需的。我可以把它们去掉,但很多脚本中也包含了一些HTML,如果这些也被修改成它们的HTML表示形式,那就麻烦了。

我很惊讶lxml会修改这些数据,最后我听说HTML解析器是为了避免修改或解释<script>标签中的数据而设计的。

有没有什么设置或命令可以让我防止这种情况发生?

谢谢

2 个回答

1

我刚找到一个替代方案,看起来也能正常工作,就是用tostring()代替write():

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

而不是

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

我想把这个也发在这里,虽然我决定使用CDATA,因为这似乎是一个更干净的解决方案,可以避免将来在其他解析脚本中出现问题。

4

把它们放在一个 CDATA区域里。

撰写回答