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

BeautifulSoup4如何正确爬取相同class的不同span标签内容

BeautifulSoup提取同class不同标签值的修复方案

问题根源

你当前写法失效的核心原因是find_next_sibling的查找范围不符合页面实际DOM结构:两个同class的span虽然是同级元素,但调用时很容易因为两个span中间存在空节点、装饰节点,导致找到的不是薪资对应的span,最终两个字段取值重复。

修复方法

最稳定的写法是在单个岗位卡片的父容器内,一次性查找所有匹配目标class的span,按列表索引取值,不需要逐个查找相邻元素,抗干扰能力更强。
修正后的transform函数代码如下:

def transform(soup):
    divs = soup.find_all('div', class_ = 'sx2jih0 zcydq876 zcydq866 zcydq896 zcydq886 zcydq8n zcydq856 zcydq8f6 zcydq8eu')
    for items in divs:
        # 提取当前岗位卡片下所有匹配class的信息标签
        info_tags = items.find_all('span', attrs={'class': 'sx2jih0 zcydq84u _18qlyvc0 _18qlyvc1x _18qlyvc3 _18qlyvc7'})
        # 按DOM顺序索引取值,第一个为地点,第二个为薪资
        location = info_tags[0].text.strip()
        # 加容错判断,避免部分岗位未标注薪资导致报错
        salary = info_tags[1].text.strip() if len(info_tags) >= 2 else "未公开薪资"

额外优化建议

  • 你代码里用到的class包含大量zcydq8xx、_18qlyvcxx这类带随机哈希值的动态类名,网站前端发版后这类类名大概率会变动,长期运行的爬虫建议结合元素的data-*自定义属性、父级固定结构、相邻固定文本特征做定位,不要完全依赖动态类名。
  • 如果提取到的信息顺序和预期不符,可以先打印info_tags列表里的每个元素文本,确认地点、薪资对应的索引位置再调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:00:53