首页 > 解决方案 > python BeautifulSoup - 无法设置属性,试图替换标签值

问题描述

我试图检查跨度标签是否有字符串'~',如果有,我想用'0'替换它。

我有数百个跨度标签,我想更改 span.text 值,因为我想将 IF 语句复制到我的代码中的许多地方,它不会努力将 var001 编码到 if 语句中。

我怎样才能做到这一点?

我的代码

span = soup.find("span", id="id001")
if span.text in  ['~']:
    span.text = 0
var001 = span.text

但这给出了错误

AttributeError: can't set attribute

标签: pythonbeautifulsouptags

解决方案


使用 bs4 4.7.1+,您可以使用 :contains 来识别相关标签并利用string.replace_with. .text~ 需要转义以将其与一般的兄弟组合器区分开来

from bs4 import BeautifulSoup as bs

html = '''<span>some text ~ </span>
<span>some text</span>
<span>some ~ text</span>
<span>some text</span>
<span>~ some text</span>'''

soup = bs(html, 'lxml')

for t in soup.select('span:contains(\~)'):
    t.string.replace_with('0')
print(soup)

推荐阅读