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

Python网络爬虫导出CSV重复数据问题求助

解决LinkedIn爬虫重复数据问题

常见原因及修复方案

1. 循环内未重置数据存储对象

如果在循环外初始化了存储单条职位信息的字典/列表,每次循环仅修改值而不新建对象,所有条目会指向同一个内存地址,最终列表全是最后一条数据的引用。

错误示例:

job_data = {}
jobs_list = []
for job in job_elements:
    job_data['title'] = job.find_element(By.XPATH, '...').text
    job_data['company'] = job.find_element(By.XPATH, '...').text
    jobs_list.append(job_data)  # 所有元素都引用同一个字典

正确写法:

jobs_list = []
for job in job_elements:
    job_data = {}  # 每次循环新建字典
    job_data['title'] = job.find_element(By.XPATH, '...').text
    job_data['company'] = job.find_element(By.XPATH, '...').text
    jobs_list.append(job_data)

2. 元素定位未使用相对路径

若定位时未基于当前循环的职位元素做相对定位,会每次都抓取页面上的第一个职位,导致数据重复。

错误示例:

for job in job_elements:
    title = driver.find_element(By.XPATH, '//h3[@class="job-title"]').text  # 全局定位,每次取第一个

正确写法:

for job in job_elements:
    title = job.find_element(By.XPATH, './/h3[@class="job-title"]').text  # 加.表示相对当前job元素定位

3. 页面动态加载未处理

LinkedIn职位是动态加载的,若未等待元素加载完成或未滚动加载更多,可能只获取到单个重复元素。

修复代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 等待职位列表完全加载
job_elements = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, '//div[@class="job-card-container"]'))
)

# 滚动加载更多职位(按需重复执行)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)  # 等待新内容加载完成

4. 验证数据收集阶段

先在循环内打印每条job_data,如果打印结果就重复,说明问题出在数据收集环节,和CSV导出/Pandas无关;如果打印正常但导出重复,检查Pandas写入逻辑:

import pandas as pd

# 正确导出方式
df = pd.DataFrame(jobs_list)
df.to_csv('jobs.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:31:15