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

Python爬取Indeed.nl多页招聘数据出现重复和缺失问题求解

问题原因

  • 分页参数逻辑错误:Indeed的start参数代表的是岗位偏移量,而非页码。单页展示15个岗位的情况下,第1页对应start=0,第2页对应start=15,以此类推。你当前代码中start直接取页码1-6,相当于每次只偏移1个岗位,请求返回的内容几乎都是第一页的结果,自然会出现大量重复、遗漏岗位的问题。
  • 未配置请求头:Indeed对无UA标识的请求会触发反爬机制,大概率会重复返回默认的第一页内容,进一步加重数据重复的问题。
  • 缺少去重逻辑:即使分页正确,Indeed的搜索结果本身也可能出现跨页重复的推广岗位,需要额外的去重校验。

修复方案

修正后的代码

import requests
from bs4 import BeautifulSoup
import json

jobs_NL = []
# 用于去重的集合,存储岗位唯一标识(标题+公司+地点组合足够判断唯一)
seen_jobs = set()

# 配置请求头,模拟浏览器访问,避免反爬
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"
}

for page_num in range(6):
    # 计算正确的偏移量:页码*单页岗位数15
    offset = page_num * 15
    url = f"https://nl.indeed.com/vacatures?q=junior+ux+designer&l=Nederland&start={offset}"
  
    print("正在获取第", page_num+1, "页")
  
    page = requests.get(url, headers=headers)
    # 可选:加个响应状态码判断,避免请求失败导致后续报错
    if page.status_code != 200:
        print(f"第{page_num+1}页请求失败,状态码:{page.status_code}")
        continue

    html = BeautifulSoup(page.content, "html.parser")
    job_cards = html.find_all("table", class_="jobCard_mainContent")

    for item in job_cards:
        title = item.find("h2").get_text() 
        company = item.find("span", class_="companyName").get_text()
        location = item.find("div", class_="companyLocation").get_text()

        if item.find("div", class_="salary-snippet") != None:
            salary = item.find("div", class_="heading6 tapItem-gutter metadataContainer").get_text()
        else:
            salary = "未找到薪资信息"
        
        # 去重判断
        job_key = (title, company, location)
        if job_key not in seen_jobs:
            seen_jobs.add(job_key)
            vacancy = {
                "title": title,
                "company": company,
                "location": location,
                "salary": salary
            }
            jobs_NL.append(vacancy)

# 导出数据
with open("indeed_junior_ux_jobs.json", "w", encoding="utf-8") as f:
    json.dump(jobs_NL, f, ensure_ascii=False, indent=2)

print(f"爬取完成,共获取{len(jobs_NL)}条有效不重复岗位数据")

额外说明

  • 如果仍存在数据缺失,可以在每次请求之间加1-3秒的随机延迟,进一步降低反爬触发概率
  • 若后续网站页面结构更新,需要同步调整元素选择的class属性值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:05