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

如何提升网页表格数据爬取速度?替代for循环的高效方案

优化表格数据爬取速度的方法

你的问题核心是减少Selenium与浏览器的交互次数——因为每次调用value.text都会触发一次浏览器通信,循环里多次调用就会拖慢速度。下面是几种实用的优化方案:

1. 用列表推导式替代显式循环

虽然本质还是循环,但列表推导式在Python内部执行效率更高,比手动append的循环要快一点:

values = driver.find_elements(By.XPATH,"//a[contains(text(), 'Rainbow Foundati')]/ancestor::tr/following-sibling::*")
ls = [value.text for value in values]

2. 用JS一次性提取所有文本(最有效的优化)

直接通过Selenium执行JavaScript,一次性把所有目标元素的text提取出来,只需要一次浏览器交互,速度提升非常明显:

# 用JS实现对应你原XPath的逻辑,一次性提取所有文本
script = """
var targetA = document.querySelector("a[textContent*='Rainbow Foundati']");
if (!targetA) return [];
var targetTr = targetA.closest('tr');
var texts = [];
var currentSibling = targetTr.nextElementSibling;
while(currentSibling) {
    texts.push(currentSibling.textContent.trim());
    currentSibling = currentSibling.nextElementSibling;
}
return texts;
"""
ls = driver.execute_script(script)

3. 跳过Selenium,直接解析静态HTML

如果目标页面的表格数据是静态渲染的(查看页面源码能看到完整数据),直接用requests请求页面,再用BeautifulSoup解析,速度会比Selenium快很多——因为不用启动浏览器和加载页面资源:

import requests
from bs4 import BeautifulSoup

url = "https://money.rediff.com/gainers"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 找到目标元素后提取后续兄弟行的文本
target_a = soup.find('a', text=lambda t: t and 'Rainbow Foundati' in t)
ls = []
if target_a:
    target_tr = target_a.find_parent('tr')
    sibling_trs = target_tr.find_next_siblings('tr')
    ls = [tr.get_text(strip=True, separator=' ') for tr in sibling_trs]

总结

  • 必须用Selenium的话,优先选JS一次性提取文本的方案,能大幅减少浏览器交互次数;
  • 页面静态的话,直接用requests+BeautifulSoup,速度碾压Selenium;
  • 列表推导式是小幅度优化,适合简单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:57:28