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

使用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()

注意事项

  1. 替换选择器:LinkedIn的页面类名会定期更新,请对照你提供的HTML片段,将代码中所有class_值替换为实际匹配的类名。比如如果你的单条线索是li标签且类为search-result,就把find_all("div", class_="entity-result__item")改成find_all("li", class_="search-result")。
  2. 处理异步加载:如果页面滚动后才加载更多数据,需要添加滚动逻辑(比如循环滚动到页面底部,直到所有22条数据加载完成)。
  3. 异常处理:如果某些字段可能不存在,用if判断元素是否存在,避免抛出AttributeError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:50:19