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
相关产品推荐
相关产品推荐

