如何将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()
关键修复点说明
- 列表初始化位置:将所有存储数据的列表移到外层循环之前,确保翻页时数据会持续追加,而非被重置
- 翻页URL修正:使用
start={i}参数拼接URL,Indeed每页显示10条职位,start值对应起始职位序号 - 完整字段提取:在遍历职位卡片的内层循环中,统一提取标题、链接、公司名、地点,并加入异常处理避免程序中断
- 资源清理:最后调用
driver.quit()关闭浏览器,释放资源
内容的提问来源于stack exchange,提问作者Haz
相关产品推荐
相关产品推荐

