You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BeautifulSoup的.find_all方法中使用带连字符的属性?

带连字符属性的BeautifulSoup查询解决方案

你遇到的报错是因为Python语法不允许函数参数名包含连字符,data-push="clock"会被Python识别为data 减 push的表达式,不符合参数命名规则,因此直接抛出语法错误,和BeautifulSoup本身的功能无关。

共有两种通用解决方式:

方案1:使用attrs参数传递属性字典(最稳妥,全场景适用)

find_all/find方法支持传入attrs关键字参数,值为属性名和属性值组成的字典,不管属性名有没有特殊字符都可以正常识别:

# 匹配所有符合条件的span标签
span_list = soup.find_all("span", attrs={"data-push": "clock"})
# 取第一个匹配结果的文本
if span_list:
    text = span_list[0].text  # 得到值为 Full Time

如果确认页面只有一个符合条件的标签,可以直接用find方法简化:

target_text = soup.find("span", attrs={"data-push": "clock"}).text

方案2:将属性名中的连字符替换为下划线(仅BS4支持,无命名冲突时可用)

BeautifulSoup4会自动匹配参数名里的下划线和HTML属性里的连字符,你也可以写成:

soup.find_all("span", data_push="clock")

注意:如果存在属性名本身就包含下划线的场景,这个方法可能出现匹配错误,优先推荐使用attrs方案。

内容的提问来源于stack exchange,提问作者Digital Farmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 14:39:03