2012-05-19 50 views
2
for finding in soup.findAll(text=reg_compiled_keyword): 
    if finding.parent.name == "img": 
     continue 

    new_text = re.sub(reg_compiled_keyword,cls.keyword_replace_tmpl.format(escaped_kw,id,escaped_kw),finding) 

    finding.replaceWith(new_text) 

For循環的回報NavigableString對象,如果我使用替換功能,它也取代了引起,當然無效的HTML屬性中的文本。BeautifulSoup查找和替換文本引起HTML問題

如何檢查當前的NavigableString是否屬於某個屬性,以便我可以跳過它?

+0

這是我的理解,find_all()不會給你屬性值的NavigableStrings。你確定你正在獲取屬性值內的NavigableStrings嗎? – Ansari

+0

你可以發佈一個小的html樣本來演示你的問題嗎? –

+0

嗨,我發現返回對象確實是一個Comment對象,而不是NavigableString。謝謝你的支持@Ansari –

回答

0

這是我的理解,find_all()不會給你屬性值的NavigableStrings。你確定你正在獲取屬性值內的NavigableStrings嗎?

假設你以某種方式可以或我錯了,試試看看你有什麼是屬性值。

finding.string in finding.parent.attrs.values() 

(當然,檢查該該.parent和.parent.attrs()是有效的對象之前))

這將返回True如果NavigableString finding是一個屬性值。

如果你想看看finding是否屬性(不是屬性值),那麼你會用keys()替換values()

+0

感謝您的回答,我不確定是否應該將此標記爲答案?你有什麼建議? –

+0

嗯,我只是修改我的答案稍微更完整。我很高興我的評論幫助您排除了故障。我確實回答了你如何檢查某個字符串是否屬於某個屬性或屬性值的主要問題,對於稍後有人遇到此問題的人可能會有所幫助,而且無論如何你都會損失50個賞金點,所以我確實建議標記爲答案:P – Ansari