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

requests请求未返回目标数据时,如何抓取动态渲染网页的表格内容?

问题原因

你请求的页面内容属于JS动态渲染数据,浏览器访问时会自动执行页面内嵌的JS脚本,异步拉取逮捕记录数据后再插入到#csp-data节点内;而requests库仅能获取服务器返回的原始静态HTML,不会执行JS逻辑,因此只能拿到空的#csp-data节点。

解决方案

有两种通用方案可解决该问题:

方案1:使用无头浏览器模拟页面渲染

直接模拟浏览器的运行逻辑,等待页面JS执行、数据渲染完成后再提取内容,适合不想分析接口的场景,以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
from bs4 import BeautifulSoup

# 初始化无头Chrome
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)

url = "https://databases.usatoday.com/nfl-arrests/"
driver.get(url)

# 等待表格渲染完成,最长等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#csp-data table tbody"))
)

# 提取渲染完成后的页面源码进行解析
soup = BeautifulSoup(driver.page_source, "html.parser")
test = soup.select('#csp-data > div > div:nth-child(3) > div > div.table-responsive > table > tbody')
print(test)

driver.quit()

使用前需要先安装依赖:pip install selenium beautifulsoup4,同时设备上需要安装对应版本的Chrome浏览器。

方案2:直接请求数据接口(更高效)

动态渲染的页面数据通常来自后端JSON接口,你可以通过浏览器控制台直接抓取出数据接口,跳过页面渲染步骤直接拿结构化数据:

  • 打开浏览器F12开发者工具,切换到「网络」面板,筛选「Fetch/XHR」类型的请求
  • 刷新页面后找到返回逮捕记录数据的接口,直接用requests请求该接口即可拿到JSON格式的全量数据,无需解析HTML表格,效率远高于方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:12:03