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

如何抓取网页内动态加载的表格?以xacte马拉松数据页为例

抓取动态表格数据的解决方案

问题分析

你之前的代码仅定位了结果标签容器,但表格数据是通过异步AJAX请求动态渲染的,直接定位容器无法获取实际数据;另外未设置等待逻辑,页面还没加载完成就执行元素定位,导致拿不到内容。

方案一:优化Selenium实现

通过显式等待确保表格数据加载完成,再定位实际的表格内容:

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

driver = webdriver.Chrome()
driver.get("http://live.xacte.com/lamarathon/")

# 显式等待表格行加载完成(最多等待10秒)
wait = WebDriverWait(driver, 10)
# 定位表格的实际数据行
table_rows = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#xact_results_tabs_results table tbody tr")))

# 遍历提取数据
for row in table_rows:
    columns = row.find_elements(By.TAG_NAME, "td")
    row_data = [col.text.strip() for col in columns]
    print(row_data)

driver.quit()

方案二:直接抓取后端API(更高效)

Selenium运行效率较低,该网站的表格数据是通过后端接口返回的JSON,直接请求接口即可:

  1. 打开浏览器开发者工具(F12),切换到Network面板,勾选XHR过滤选项
  2. 刷新页面或切换结果标签,找到返回数据的请求(通常URL包含results或data关键字)
  3. 复制该请求的URL、请求头和参数,用requests库直接请求:
import requests

# 替换为实际找到的API接口URL
api_url = "http://live.xacte.com/lamarathon/results/load_results"
# 根据实际请求参数调整,比如分页、分类参数
params = {
    "page": 1,
    "per_page": 50
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(api_url, params=params, headers=headers)
data = response.json()

# 提取表格数据(根据返回的JSON结构调整)
for item in data["results"]:
    print(item["name"], item["time"], item["position"])

注意事项

  • 若API请求需要验证(如Cookie),可从浏览器复制对应的Cookie值添加到headers中
  • 分页数据需循环请求不同page参数,直到返回数据为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:12:26