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

使用Python爬取Indeed数据无结果问题排查与解决求助

问题描述

在Python 3.10.6 IDLE中运行以下Indeed数据爬取代码,期望提取职位标题、公司、薪资、摘要信息,但运行后仅输出页码提示,得到空DataFrame,无任何目标数据返回。

原代码:

#Indeed data
import requests
from bs4 import BeautifulSoup
import pandas as pd

def extract(page):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko"}
    url = "https://www.indeed.com/jobs?q=Data&l=United+States&sc=0kf%3Ajt%28internship%29%3B&vjk=a2f49853f01db3cc={page}"
    r = requests.get(url,headers)
    soup = BeautifulSoup(r.content, "html.parser")
    return soup

def transform(soup):
    divs = soup.find_all("div", class_ = "jobsearch-SerpJobCard")
    for item in divs:
        title = item.find ("a").text.strip()
        company = item.find("span", class_="company").text.strip()
        try:
            salary = item.find("span", class_ = "salarytext").text.strip()
        finally:
            salary =  ""
        summary = item.find("div",{"class":"summary"}).text.strip().replace("\n","\n")

        job = {
            "title":title,
            "company":company,
            'salary':salary,
            "summary":summary
        }
        joblist.append(job)

joblist = []

for i in range(0,40,10):
    print(f'Getting page, {i}')
    c = extract(10)
    transform(c)

df = pd.DataFrame(joblist)
print(df.head())
df.to_csv('jobs.csv')

运行输出:

Getting page, 0
Getting page, 10
Getting page, 20
Getting page, 30
Empty DataFrame
Columns: []
Index: []
问题原因分析
  • URL构造错误:
    1. User-Agent字符串未闭合,缺少结尾的")",请求头格式无效,易被Indeed反爬拦截。
    2. URL未用f-string格式化,{page}无法替换为实际页码;且Indeed分页参数应为start(如start=0、start=10),原URL分页逻辑完全错误。
  • 分页调用参数错误:循环中固定调用extract(10),而非传入循环变量i,导致重复爬取同一页,且该页可能无有效数据。
  • 页面元素定位失效:Indeed页面结构已更新,原代码使用的jobsearch-SerpJobCard、company等class名称已失效,无法匹配任何元素,divs为空列表,无数据写入joblist。
  • 异常处理逻辑错误:用try-finally处理薪资提取,无论是否找到元素都会将salary设为空;且find返回None时调用.text会直接抛出异常,中断循环。
修正后的代码
# Indeed数据爬取
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"
    }
    # 使用正确分页参数start,用f-string格式化URL
    url = f"https://www.indeed.com/jobs?q=Data&l=United+States&sc=0kf%3Ajt%28internship%29%3B&start={page}"
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()  # 检查请求是否成功
        soup = BeautifulSoup(r.content, "html.parser")
        return soup
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return None

def transform(soup):
    if not soup:
        return
    # 更新为当前Indeed的职位卡片class
    divs = soup.find_all("div", class_="job_seen_beacon")
    for item in divs:
        job = {}
        # 标题提取,容错处理
        title_tag = item.find("h2", class_="jobTitle")
        job["title"] = title_tag.text.strip() if title_tag else "无标题"
        
        # 公司名称提取,容错处理
        company_tag = item.find("span", class_="companyName")
        job["company"] = company_tag.text.strip() if company_tag else "无公司名"
        
        # 薪资提取,改用try-except容错
        try:
            salary_tag = item.find("div", class_="salary-snippet-container")
            job["salary"] = salary_tag.text.strip() if salary_tag else ""
        except:
            job["salary"] = ""
        
        # 摘要提取,容错处理
        summary_tag = item.find("div", class_="job-snippet")
        job["summary"] = summary_tag.text.strip().replace("\n", " ") if summary_tag else "无摘要"
        
        joblist.append(job)

joblist = []

# 传入正确分页参数i,实现多页爬取
for i in range(0, 40, 10):
    print(f'获取第{i//10 + 1}页数据...')
    soup = extract(i)
    transform(soup)

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

修改说明:

  1. 修复User-Agent格式,降低被反爬拦截概率。
  2. 调整URL分页参数为start,用f-string正确格式化页码。
  3. 更新页面元素class名称,适配当前Indeed页面结构。
  4. 为每个元素提取添加容错处理,避免异常中断循环。
  5. 捕获请求错误并给出提示,优化异常处理逻辑。
  6. 循环传入正确分页参数,实现有效多页爬取。

内容的提问来源于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:50:21