我使用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