我使用python ElementTree来读取和修改我的html文件的一些内容。当我完成更改并使用ElementTree.write函数时,
1)它增加了额外的html:所有标签的前面。我该怎样避免这种情况?
2)它还增加了&我有特殊字符的地方。我该如何避免这种情况?
谢谢你, 迪夫亚。
答案 0 :(得分:1)
你做不到。 ElementTree通过加载XML,解析它,并且只存储抽象表示来工作。它通过遍历抽象表示将其写入字符串,但它不记得哪些字符作为实体转义,或者元素是否存储为<foo/>
或<foo></foo>
(HTML:{ {1}}或<foo>
)
现在,由于ElementTree只能使用XML(而非HTML),我猜你正在使用lxml.html - 在这种情况下,它实际上会自动纠正某些形式的错误HTML,因为否则它将无法正确存储它。
处理HTML的正确方法是将完全保存的数据保存,除非你如何更改它,就是抓住记住其原始表示的标记。我使用sgmllib完成了此操作,但这并不完美 - 例如有一个<foo></foo>
方法可以获取开始标记的完全内容,但没有相应的结束标记方法。无论如何,这可能还不错。
例如,要写出删除了所有段落的HTML,可以编写如下函数:
get_starttag_text
这可能需要更多的工作来不破坏输入。查看文档以获取有关所有内容的详细信息。