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 オブジェクトを返します。replace 関数を使用すると、もちろん無効な HTML の原因となる属性内のテキストも置き換えられます。
現在の NavigableString が属性内にあるかどうかを確認して、スキップできるようにするにはどうすればよいですか?