我使用python ElementTree来读取和修改我的html文件的一些内容。当我完成更改并使用ElementTree.write函数时,它会添加额外的html:所有标签的infront。我应该如何避免这种情况?python ElementTree写函数
2)它还增加了&我有特殊字符。我应该如何避免这种情况?
谢谢 Divya。
我使用python ElementTree来读取和修改我的html文件的一些内容。当我完成更改并使用ElementTree.write函数时,它会添加额外的html:所有标签的infront。我应该如何避免这种情况?python ElementTree写函数
2)它还增加了&我有特殊字符。我应该如何避免这种情况?
谢谢 Divya。
你不行。 ElementTree通过加载XML,解析它并仅存储抽象表示来工作。它写道,出来一串步行抽象表示,但它不记得的东西哪些字符被转义为实体或元素是否被存储为<foo/>
或<foo></foo>
(HTML:<foo>
或<foo></foo>
)
现在,因为ElementTree只能用于XML(不是HTML),所以我猜你正在使用lxml.html--在这种情况下,它实际上会自动纠正某些形式的错误HTML,否则它将无法存储它正确。
正确的方式来处理HTML的数据,你想要完全保存,除了你如何改变它,是抓住它的记忆它们的原始表示形式的标记。我已经使用sgmllib这样做了,但这是不完美的 - 例如有一个get_starttag_text
方法用于获取开始标记的内容,但没有相应的结束标记方法。无论如何,这可能已经足够好了。
例如,写出来的HTML,所有的段落被删除,一个可以写的函数是这样的:
from cStringIO import StringIO
class SGMLModifier(sgmllib.SGMLParser):
def __init__(self, *args, **kwargs):
sgmllib.SGMLParser.__init__(self, *args, **kwargs)
self._file = StringIO()
def getvalue(self):
return self._file.getvalue()
def start_b(self, attributes):
# skip it
pass
def end_b(self):
# skip it
pass
def unknown_starttag(self, tag, attributes):
self._file.write(self.get_starttag_text())
def unknown_endtag(self, tag):
# we can't get this verbatim.
self._file.write('</%s>' % tag)
def handle_comment(self, comment):
# no verbatim here either.
self._file.write('<!-- %s -->' % comment)
def handle_data(self, data):
self._file.write(data)
def convert_entityref(self, ref):
return '&' + ref + ';'
def remove_bold(html):
parser = SGMLModifier()
parser.feed(html)
return parser.getvalue()
这可能需要更多的工作,以不破坏原输入。查看文档以了解所有内容。
这可能有一些帮助吗? http://stackoverflow.com/questions/780334/unescape-python-strings-from-http – Louis