如何用BeautifulSoup的findAll一次性匹配带/不带末尾空格的同类class标签
问题原因说明
之前的代码传入固定字符串是精确匹配规则,会把class属性值的所有字符(包括末尾空格)都纳入匹配条件,因此只能命中完全一致的标签。
方案1:正则模糊匹配
如果需要严格匹配你指定的class值(仅允许末尾存在空白),可直接传入正则规则实现:
import re items = html.findAll('h4', {'class': re.compile(r'^item-title font-weight-normal\s*$')})
规则中的\s*会匹配0个或多个任意空白字符,不管class值末尾有没有空格、有几个空格都能匹配到。
方案2:多类名匹配(更推荐)
HTML的class是多值属性,你要匹配的本质是同时携带item-title和font-weight-normal两个类的h4标签,BeautifulSoup原生支持传入类名列表匹配,会自动忽略属性值里的多余空格:
items = html.findAll('h4', class_=['item-title', 'font-weight-normal'])
该方案无需额外导入模块,兼容更多场景:就算class值前后、类名之间有多个空格,甚至类名顺序调换也能正确命中,符合HTML标准的类名识别逻辑。
内容的提问来源于stack exchange,提问作者Calvin Creater
相关产品推荐
相关产品推荐

