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

如何将Indeed爬取的职位信息存入列表并生成DataFrame?

解决Indeed职位爬取中的循环与列表追加问题

问题诊断

你的代码存在几个核心问题导致空列表:

  • 存储数据的列表(job_titles_list等)被放在每页循环内部,每次翻页都会重置为空列表
  • 翻页URL拼接错误:str()里没有传入页码变量i,导致所有页面请求的都是同一个初始URL
  • 仅实现了职位标题和链接的提取,未将公司名、地点纳入内层循环的提取逻辑
  • 外层的单个find_element调用仅获取第一个元素,无实际作用

修复后的完整代码

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time

# 浏览器配置
options = webdriver.ChromeOptions()
options.add_argument("--incognito")
options.add_experimental_option("detach", True)

# 初始化存储列表(必须放在循环外)
job_titles_list = []
company_names_list = []
job_locations = []
job_links = []

# 创建驱动
driver = webdriver.Chrome(options=options)

# 翻页循环:爬取0-200条,每页10条
for i in range(0, 200, 10):
    # 正确拼接翻页URL:Indeed用start参数控制页码
    url = f"https://ca.indeed.com/jobs?q=data+analyst&l=Kitchener-Waterloo%2C+ON&start={i}"
    driver.get(url)
    time.sleep(3)  # 等待页面加载

    # 获取所有职位卡片
    job_page = driver.find_element(By.ID, "mosaic-jobResults")
    jobs = job_page.find_elements(By.CLASS_NAME, "job_seen_beacon")

    # 遍历每个职位卡片
    for job in jobs:
        # 提取职位标题
        job_title = job.find_element(By.CLASS_NAME, "jobTitle").text
        job_titles_list.append(job_title)
        
        # 提取职位链接
        job_link = job.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
        job_links.append(job_link)
        
        # 提取公司名称(加入异常处理,避免部分职位无公司名)
        try:
            company_name = job.find_element(By.CLASS_NAME, "companyName").text
        except:
            company_name = "未知公司"
        company_names_list.append(company_name)
        
        # 提取地点(加入异常处理)
        try:
            location = job.find_element(By.CLASS_NAME, "companyLocation").text
        except:
            location = "未知地点"
        job_locations.append(location)

# 合并为DataFrame
job_df = pd.DataFrame({
    "职位标题": job_titles_list,
    "公司名称": company_names_list,
    "工作地点": job_locations,
    "职位链接": job_links
})

print(job_df.head())
driver.quit()

关键修复点说明

  1. 列表初始化位置:将所有存储数据的列表移到外层循环之前,确保翻页时数据会持续追加,而非被重置
  2. 翻页URL修正:使用start={i}参数拼接URL,Indeed每页显示10条职位,start值对应起始职位序号
  3. 完整字段提取:在遍历职位卡片的内层循环中,统一提取标题、链接、公司名、地点,并加入异常处理避免程序中断
  4. 资源清理:最后调用driver.quit()关闭浏览器,释放资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:56:14