您可以使用解析器以遞歸方式導航樹並僅替換由文本組成的標籤。
在這樣做,仍然有幾件事情你需要考慮:
- 並非所有的文本需要更換(如內嵌的JavaScript。)
- 該文件的一些元素可能不需要解析(如標題。等)
這裏是你如何能做到這一點的快速和非生產現成的例子:
html = """The HTML you need to parse"""
import BeautifulSoup
IGNORE_TAGS = ['script', 'style']
def parse_content(item, replace_what, replace_with, ignore_tags = IGNORE_TAGS):
for content in item.contents:
if isinstance(content, BeautifulSoup.NavigableString):
content.replaceWith(content.replace(replace_what, replace_with, ignore_tags))
else:
if content.name not in ignore_tags:
parse_content(content, replace_what, replace_with, ignore_tags)
return item
soup = BeautifulSoup.BeautifulSoup(html)
body = soup.html.body
replaced_content = parse_content(body, 'a', 'b')
這應該替換「A」與「b」,但留下內容的任何occurence那就是:
- Inside inline javascript或css(雖然內聯JS或CSS不應出現在文檔的正文中)。
- 在諸如IMG標記的一個參考,一個...
- 一個標籤本身當然
,你一定要去,這取決於你的詞彙表,以確保你不會只更換部分與其他事物相關的詞;要做到這一點是有道理的使用regex insted content.replace。
你可能想看看美麗的湯爲你的解析 –
我評論和沒有回答的事實應該指出,我可能有足夠的時間在我的手中實際寫出正確的答案。見下文。 –
您不必在一個循環中使用客戶端的highlite。使用setTimeout來模擬協同例程。 – Dykam