使用Selenium+Beautiful Soup爬取LinkedIn线索数据遇阻求助
解决LinkedIn线索批量爬取并导出CSV的问题
问题核心是你只提取了单个条目数据,因为没有遍历页面上所有的线索容器。下面是具体的解决步骤和代码示例:
关键修正点
- 用
find_all()替代find()获取所有线索条目容器,而不是仅第一个 - 遍历每个容器,在内部提取对应字段
- 确保页面数据完全加载后再解析(避免因异步加载导致的漏数据)
完整代码示例
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import csv # 假设你已经完成登录并导航到目标页面,这里继续后续操作 # 等待页面所有线索加载完成(替换为你页面中线索容器的实际选择器) WebDriverWait(driver, 15).until( EC.presence_of_all_elements_located((By.CLASS_NAME, "entity-result__item")) ) # 获取页面完整HTML page_html = driver.page_source soup = BeautifulSoup(page_html, "html.parser") # 定位所有线索条目容器(务必替换为你页面中实际的容器选择器) all_leads = soup.find_all("div", class_="entity-result__item") # 初始化数据存储列表 leads_list = [] # 遍历每个线索条目 for lead in all_leads: # 提取姓名(替换为你页面中姓名元素的选择器) name = lead.find("span", class_="entity-result__title-text").get_text(strip=True) if lead.find("span", class_="entity-result__title-text") else "无数据" # 提取职位(替换为你页面中职位元素的选择器) position = lead.find("div", class_="entity-result__primary-subtitle").get_text(strip=True) if lead.find("div", class_="entity-result__primary-subtitle") else "无数据" # 提取公司(替换为你页面中公司元素的选择器) company = lead.find("div", class_="entity-result__secondary-subtitle").get_text(strip=True) if lead.find("div", class_="entity-result__secondary-subtitle") else "无数据" # 提取任职时长(替换为你页面中任职时长元素的选择器) tenure = lead.find("span", class_="entity-result__summary").get_text(strip=True) if lead.find("span", class_="entity-result__summary") else "无数据" # 将单条数据加入列表 leads_list.append({ "姓名": name, "职位": position, "公司": company, "任职时长": tenure }) # 导出数据到CSV with open("linkedin_leads.csv", "w", newline="", encoding="utf-8") as csv_file: writer = csv.DictWriter(csv_file, fieldnames=["姓名", "职位", "公司", "任职时长"]) writer.writeheader() writer.writerows(leads_list) # 关闭浏览器 driver.quit()
注意事项
- 替换选择器:LinkedIn的页面类名会定期更新,请对照你提供的HTML片段,将代码中所有
class_值替换为实际匹配的类名。比如如果你的单条线索是li标签且类为search-result,就把find_all("div", class_="entity-result__item")改成find_all("li", class_="search-result")。 - 处理异步加载:如果页面滚动后才加载更多数据,需要添加滚动逻辑(比如循环滚动到页面底部,直到所有22条数据加载完成)。
- 异常处理:如果某些字段可能不存在,用
if判断元素是否存在,避免抛出AttributeError。
内容的提问来源于stack exchange,提问作者Sushmitha
相关产品推荐
相关产品推荐

