python - 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
解决方案
使用 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)
推荐阅读
- javascript - 在 Javascript 中下载巨大的 Base64
- flask - Python:Flask 上不稳定的 joblib 行为
- html - 为什么 ul 和第一个 li 元素之间有一个空格?
- syntax - SPSS为从字符串更改的数字变量添加了一个随机的“离散缺失值”
- c# - C# BackgroundWorker 在重启时吃掉内存
- javascript - 根据 2 个值将数组过滤为唯一?
- entity-framework - EF 条件查询以匹配任何可用信息不起作用
- rest - 是否可以在内部(私有)IIS 服务器上运行 Golang REST Web 应用程序?
- python - 一起打印函数调用函数
- java - 在 Android Studio 中实现扩展面板时出错