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

基于Selenium与BeautifulSoup实现Sales Navigator分页爬取求助

解决方案

核心思路

把单页的滚动加载、姓名提取逻辑封装成可复用的函数,然后循环点击「下一页」按钮处理剩余8页,每次将提取到的姓名直接追加到全局的names列表中。

优化后的完整代码

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 time

# 初始化浏览器驱动(根据你的浏览器类型调整,比如Chrome/Firefox)
driver = webdriver.Chrome()
# 全局存储所有姓名的列表
names = []

def scrape_single_page(driver, names_list):
    """爬取单页姓名数据并追加到传入的列表"""
    # 定位结果容器
    section = driver.find_element(By.XPATH, "//*[@id='search-results-container']")
    time.sleep(3)
    
    # 执行8次滚动加载
    counter = 0
    while counter < 8:
        driver.execute_script('arguments[0].scrollTop = arguments[0].scrollTop + arguments[0].offsetHeight;', section)
        counter += 1
        time.sleep(7)
    
    # 解析页面提取姓名
    src2 = driver.page_source
    soup = BeautifulSoup(src2, 'lxml')
    name_soup = soup.find_all('span', {'data-anonymize': 'person-name'})
    
    # 追加数据到全局列表
    for name in name_soup:
        names_list.append(name.text.strip())

# 1. 处理第一页
dm = "你的Sales Navigator搜索页URL"  # 替换为实际搜索页URL
driver.get(dm)
time.sleep(5)  # 等待页面初始加载
scrape_single_page(driver, names)

# 2. 处理剩余8页
for page in range(8):
    try:
        # 等待下一页按钮可点击后点击(注意:aria-label文本需匹配页面语言,英文页面为"Next")
        next_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='下一页']"))
        )
        next_btn.click()
        time.sleep(5)  # 等待页面切换加载完成
        
        # 爬取当前页数据
        scrape_single_page(driver, names)
    except Exception as e:
        print(f"爬取第{page+2}页时出错: {e}")
        break

# 输出结果(可选)
print(f"总共爬取到{len(names)}个姓名")
print(names)

# 关闭浏览器
driver.quit()

关键说明

  • 函数复用:scrape_single_page函数封装了单页的核心操作,避免重复编写相同代码。
  • 分页逻辑:循环8次定位并点击下一页按钮,需根据页面实际语言调整按钮的aria-label文本。
  • 等待优化:用WebDriverWait替代部分time.sleep,能更可靠地等待元素加载,减少页面加载慢导致的错误。
  • 全局列表:names列表在函数外部初始化,确保所有页面的姓名都累计存储在同一个列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:09