如何用Python和Selenium提取LinkedIn个人主页的经历信息?
提取LinkedIn职业经历信息到DataFrame的解决方案
LinkedIn会频繁更新页面元素类名,需使用更具鲁棒性的CSS选择器定位元素,以下是适配当前页面结构的实现方案:
完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException import pandas as pd # 初始化浏览器驱动(根据你使用的浏览器调整,比如Chrome/Firefox) driver = webdriver.Chrome() # 访问目标LinkedIn职业经历页面(需先完成登录验证) driver.get("https://www.linkedin.com/in/maxlvsq/details/experience/") # 定位所有职业经历条目 jobs = driver.find_elements(By.CSS_SELECTOR, 'section#experience + div ul li.pvs-entity') # 初始化存储数据的字典 exp = { 'job': [], 'company': [], 'date': [], 'location': [], 'description': [] } for job in jobs: # 提取职位名称 try: job_title = job.find_element(By.CSS_SELECTOR, 'div.pvs-entity__title-wrapper span.t-bold span[aria-hidden="true"]').text except NoSuchElementException: job_title = '*missing value*' exp['job'].append(job_title) # 提取公司名称 try: company_name = job.find_element(By.CSS_SELECTOR, 'div.pvs-entity__subtitle-wrapper span.t-normal span[aria-hidden="true"]').text except NoSuchElementException: company_name = '*missing value*' exp['company'].append(company_name) # 提取时间范围 try: date_range = job.find_element(By.CSS_SELECTOR, 'span.pvs-entity__caption-wrapper').text except NoSuchElementException: date_range = '*missing value*' exp['date'].append(date_range) # 提取工作地点 try: location = job.find_element(By.CSS_SELECTOR, 'span.pvs-entity__caption-wrapper + span').text except NoSuchElementException: location = '*missing value*' exp['location'].append(location) # 提取工作描述(若描述折叠则先点击展开) try: # 检查是否有展开按钮 expand_btn = job.find_element(By.CSS_SELECTOR, 'button[aria-expanded="false"]') expand_btn.click() except NoSuchElementException: pass # 描述已展开或无展开按钮 try: description = job.find_element(By.CSS_SELECTOR, 'div.pvs-list__outer-container span[aria-hidden="true"]').text except NoSuchElementException: description = '*missing value*' exp['description'].append(description) # 转换为DataFrame df = pd.DataFrame(exp) print(df) # 关闭浏览器 driver.quit()
关键说明
- 条目定位:使用
section#experience + div ul li.pvs-entity定位所有职业经历,依赖页面结构层级而非易变的类名,稳定性更强。 - 异常处理:每个字段都添加了异常捕获,避免因部分条目缺失信息导致程序崩溃。
- 描述展开:自动检测并点击折叠的描述按钮,确保能提取完整内容。
内容的提问来源于stack exchange,提问作者Wolfgang1912
相关产品推荐
相关产品推荐

