使用Beautiful Soup提取多层div嵌套下h4标签内容返回空列表如何解决
问题原因排查
- 首先可以排除h4嵌套在多层div内的影响:BeautifulSoup的DOM查找逻辑是遍历整个文档树的,标签嵌套深度不会导致查找失效。
- 你代码返回空列表的核心原因是class属性的多值匹配规则不匹配:HTML中class支持同时设置多个类名,BeautifulSoup默认会把class属性值拆分为列表处理,你在attrs中直接传入
'pr-3 mb-3'这个带空格的字符串时,会被当成单个类名做完全匹配,和实际拆分后的两个独立类名pr-3、mb-3匹配不上,最终查找失败。
最简提取代码
因为id属性在HTML页面中是全局唯一的,你完全不需要叠加class条件做过滤,直接按id查找即可,代码如下:
# 直接按唯一id查找对应标签 rfq_tag = soup.find(name='h4', id='rfq-info-header-id') # 提取内容前先做非空判断,避免标签不存在时报错 if rfq_tag: rfq_id = rfq_tag.text.strip() print(rfq_id)
运行后会直接输出目标值 RFQ1526090。
原有代码修复方案
如果你确实需要同时匹配id和class做过滤,有两种修复方式:
- 将class的匹配值改为列表形式,对应拆分后的多个类名:
rfq_id = [tag.text.strip() for tag in soup.find_all(name='h4', attrs={'id': 'rfq-info-header-id','class': ['pr-3', 'mb-3']})]
- 使用BeautifulSoup内置的
class_参数,支持直接传入空格分隔的多类名字符串:
rfq_id = [tag.text.strip() for tag in soup.find_all(name='h4', id='rfq-info-header-id', class_='pr-3 mb-3')]
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

