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

如何优化基于Selenium webdriver的表格数据爬虫?

爬取效率优化可行方案

最优方案:替换Selenium模拟浏览器方案

这是能带来量级速度提升的核心优化,优先尝试

  • Selenium模拟浏览器的页面渲染、资源加载、元素等待开销是当前速度慢的核心原因,你可以通过抓包获取站点的搜索接口直接请求数据:
    1. 打开浏览器F12开发者工具切换到「网络」标签,点击一次搜索按钮,找到提交搜索参数的HTTP请求
    2. 复制该请求的请求头、表单参数(就是你输入的姓名通配符、part值等参数)
    3. 后续循环直接用requests库构造对应请求,返回的内容要么是结构化JSON,要么是HTML片段,用lxml或者BeautifulSoup解析即可,速度比Selenium快10倍以上

必须保留Selenium时的优化方案

如果站点有强反爬必须用浏览器环境,可做如下优化:

启动配置优化

  • 开启无头模式,关闭可视化窗口,同时禁用图片、CSS、字体等非必要资源加载,减少渲染开销:
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# 无头模式
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
# 禁用图片、样式、字体加载
prefs = {
    "profile.managed_default_content_settings.images": 2,
    "profile.managed_default_content_settings.stylesheets": 2,
    "profile.managed_default_content_settings.fonts": 2
}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome('./chromedriver.exe', options=chrome_options)
  • 删掉无意义的driver.maximize_window()操作,无头模式下窗口大小不影响元素定位,徒增开销。

流程逻辑优化

  • 去掉重复的元素等待:输入框是页面常驻元素,不需要每次循环都重复等待可点击,只需要每次点击搜索后等待表格加载完成即可。
  • 优化表格提取逻辑:原代码分6次查询所有列元素,再循环1000次逐个取属性,会重复遍历DOM树多次,优化为一次性取所有行,逐行提取对应列:
# 点击搜索后仅等待表格行加载完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "table tbody tr")))
rows = driver.find_elements(By.CSS_SELECTOR, "table tbody tr")
for row in rows:
    tds = row.find_elements(By.TAG_NAME, "td")
    # 一次提取6个字段追加到列表
    li.extend([tds[1].text, tds[2].text, tds[3].text, tds[4].text, tds[5].text, tds[6].text])

数据存储优化

不要等全部324页采集完再写入CSV,每采集完一页就追加写入一次,避免程序崩溃丢失全部数据,同时减少内存占用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:05