如何在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
相关产品推荐
相关产品推荐

