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/

10-13 08:52