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

运行Indeed职位爬取代码无提取数据,求排查与解决

问题分析与解决方法

问题原因

  • User-Agent不完整:原请求头里的User-Agent字符串未闭合,缺少结尾的)和双引号,导致请求被Indeed反爬机制拦截,返回的页面无有效内容
  • URL格式错误:原URL里的分页参数{page}未用f-string语法解析,还错误携带了单个职位的vjk参数,无法正确跳转分页
  • 分页调用错误:循环中每次固定传10给extract函数,未使用循环变量i,相当于重复爬取同一错误页面
  • 异常处理逻辑错误:try-finally会强制清空薪资内容,哪怕try块成功获取到薪资,也会被finally覆盖为空字符串,应改用try-except
  • 元素选择器过时:Indeed页面结构已更新,原有的jobsearch-SerpJobCard、company、salarytext等类名不再生效,无法定位目标元素

修复后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

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,使用start参数分页,移除无效的vjk参数
    url = f"https://www.indeed.com/jobs?q=Data&l=United+States&sc=0kf%3Ajt%28internship%29%3B&start={page}"
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.content, "html.parser")
    return soup

def transform(soup):
    # 使用当前Indeed的职位卡片选择器
    job_cards = soup.find_all("div", class_="job_seen_beacon")
    for card in job_cards:
        # 提取职位名称,移除"new"标签
        title = card.find("h2", class_="jobTitle").text.strip().replace("new", "").strip()
        # 提取公司名称
        company = card.find("span", class_="companyName").text.strip()
        # 提取薪资(处理不存在的情况)
        salary = ""
        try:
            salary = card.find("div", class_="salary-snippet").text.strip()
        except AttributeError:
            pass
        # 提取职位摘要,清理换行符
        summary = card.find("div", class_="job-snippet").text.strip().replace("\n", " ")
        
        job = {
            "title": title,
            "company": company,
            "salary": salary,
            "summary": summary
        }
        joblist.append(job)

joblist = []

# 循环传递正确的分页参数,每次偏移10条数据
for i in range(0, 40, 10):
    print(f'Getting page, {i}')
    soup = extract(i)
    transform(soup)

df = pd.DataFrame(joblist)
print(df.head())
df.to_csv('indeed_data_internships.csv', index=False)

关键修改说明

  • 补全User-Agent:确保请求头符合浏览器标准,避免被反爬机制识别为爬虫
  • 修正URL结构:用start={page}实现分页,移除无效的vjk参数,保证分页链接正确
  • 正确传递分页参数:循环中把i传给extract函数,实现多页数据爬取
  • 修复异常处理:改用try-except捕获薪资不存在的情况,保留成功获取到的薪资数据
  • 更新元素选择器:适配Indeed当前的页面结构,替换为有效的类名定位目标元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:05:24