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

使用BeautifulSoup爬取Indeed时如何提取带title属性的span岗位名称

问题解决方法

问题根源

你当前使用item.find('span')会默认匹配当前节点下的第一个span标签,而部分岗位的「new」标注span排在岗位名span之前,因此会优先抓取到无关的new文本。
目标岗位名的span带有专属特征:存在title属性,直接按这个特征筛选即可跳过干扰标签,精准定位到岗位名。

修改后的代码

首先修正原代码的缩进错误、参数缺失问题,同时替换span的匹配逻辑:

import requests
from bs4 import BeautifulSoup

def extract(page):
    # 补充User-Agent避免被反爬拦截
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}
    url = f'https://www.indeed.com/jobs?l=Bakersfield%2C%20CA&start={page}&vjk=42cee666fbd2fae9'
    # 明确指定headers参数
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    return soup

def transform(soup):
    divs = soup.find_all('div', class_ = 'heading4 color-text-primary singleLineTitle tapItem-gutter')
    for item in divs:
        # 筛选带有title属性的span节点,strip()去除文本前后多余空格
        res = item.find('span', attrs={'title': True}).text.strip()
        print(res)       
    return

c=extract(0)
transform(c)

逻辑说明

  • attrs={'title': True}参数表示匹配所有带有title属性的span标签,不会受「new」标注标签的位置影响,修改后运行结果不会再出现多余的「new」文本
  • 补充了User-Agent请求头,避免Indeed直接拦截你的爬取请求返回空内容
  • 修正了原代码中的缩进错误、requests参数传递错误
  • 如果担心部分节点没有符合要求的span导致报错,可以替换匹配逻辑加异常兼容:
    job_span = item.find('span', attrs={'title': True})
    res = job_span.text.strip() if job_span else '无岗位名'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:57:02