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

Python BeautifulSoup抓取网页表格仅返回首行问题求助

问题根因

你访问的目标站点使用Angular框架开发,表格数据是页面加载完成后通过JavaScript动态渲染填充的。你直接用普通HTTP请求(比如requests库)拿到的是未经过JS渲染的初始HTML源码,里面仅包含表格结构和前端模板占位符,没有真实的业务数据,所以BeautifulSoup只能解析到表头和单条模板行,无法拿到更多表格数据。

解决方法
  • 方案1:直接调用后端数据接口(优先选择,效率最高)
    打开浏览器开发者工具(F12),切换到「网络」面板,筛选「Fetch/XHR」类型的请求,刷新页面后查找返回河流水量数据的接口,直接模拟请求该接口即可拿到JSON格式的全量数据,取索引为23的元素(数组默认从0开始计数,对应第24条数据)即可,无需解析HTML。
  • 方案2:使用支持JS渲染的爬虫工具
    如果无法定位到数据接口,可以使用Selenium、Playwright这类支持模拟浏览器运行的工具,启动无头浏览器加载完整页面,等待表格数据全部渲染完成后再提取页面源码交给BeautifulSoup解析,此时就能获取到所有真实的表格行数据,直接取第24行即可。

方案2示例代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from bs4 import BeautifulSoup

# 配置无头Chrome参数
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=chrome_options)
driver.get("http://hydro.marlborough.govt.nz/reports/riverreport.html")

# 等待10秒,确保页面JS执行完成、表格渲染完毕
WebDriverWait(driver, 10).until(
    lambda d: len(d.find_elements("tag name", "tr")) > 20
)

# 提取渲染完成的页面源码解析
soup = BeautifulSoup(driver.page_source, "html.parser")
all_table_rows = soup.select("table.table-striped tbody tr")
# 取第24行,索引为23
target_row = all_table_rows[23]
print(target_row.get_text(strip=True, separator="|"))

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:03