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是否在属性内,以便可以跳过它?
最佳答案
据我了解,find_all()不会给您NavigableStrings作为属性值。您确定要获取属性值内的NavigableStrings吗?
假设您以某种方式可以还是我错了,请尝试执行此操作以查看您拥有的是属性值。
finding.string in finding.parent.attrs.values()
(当然,在此之前,请检查.parent和.parent.attrs()是有效的对象))
如果NavigableString
True
是属性值,则将返回finding
。如果要查看
finding
是否是属性(而不是属性值),则可以将values()
替换为keys()
。关于python - BeautifulSoup查找和替换文本会导致HTML问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10665311/