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

使用Beautiful Soup爬取海啸数据时无法找到表格标签求助

提取NOAA海啸数据页面指定列的解决方案

这个页面是React动态渲染的,直接用requests获取的初始HTML里没有渲染后的表格内容,所以你的BeautifulSoup代码找不到目标元素。下面给两种可行的解决方法:

方法一:直接调用API接口(推荐,高效稳定)

这个页面的数据是通过后端API加载的,你可以直接请求API获取原始JSON数据,无需解析页面:

  1. 打开浏览器开发者工具(F12)→ 切换到「Network」标签 → 刷新页面,在XHR/fetch请求里能找到数据接口,地址为https://www.ngdc.noaa.gov/hazel/rest/hazards/tsunami/events?maxYear=2022&minYear=2010&country=USA
  2. 用Python请求该接口并提取字段:
import requests

# 直接请求API接口
api_url = 'https://www.ngdc.noaa.gov/hazel/rest/hazards/tsunami/events?maxYear=2022&minYear=2010&country=USA'
resp = requests.get(api_url)
event_data = resp.json()

# 提取所需的Year、月份日期、Hr、Mn、Sec字段
for event in event_data:
    print(f"""
Year: {event.get('year')}
Mom Dy: {event.get('month')}/{event.get('day')}
Hr: {event.get('hour')}
Mn: {event.get('minute')}
Sec: {event.get('second')}
------------------------
""")

方法二:用Selenium渲染页面(适合动态渲染场景)

如果不想找API,可以用Selenium模拟浏览器加载页面,等React渲染完成后再提取元素:

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

url = 'https://www.ngdc.noaa.gov/hazel/view/hazards/tsunami/event-data?maxYear=2022&minYear=2010&country=USA'
# 初始化Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver = webdriver.Chrome()
driver.get(url)

# 等待表格容器加载完成
wait = WebDriverWait(driver, 10)
grid_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'ReactVirtualized__Grid__innerScrollContainer')))

# 遍历每行提取数据
rows = grid_container.find_elements(By.CLASS_NAME, 'ReactVirtualized__Table__row')
for row in rows:
    cells = row.find_elements(By.CLASS_NAME, 'ReactVirtualized__Table__rowColumn')
    # 根据页面列顺序提取对应内容(索引可根据实际页面调整)
    year = cells[0].text
    mom_dy = cells[1].text
    hr = cells[2].text
    mn = cells[3].text
    sec = cells[4].text
    print(f"Year: {year}, Mom Dy: {mom_dy}, Hr: {hr}, Mn: {mn}, Sec: {sec}")

driver.quit()

原代码无效的原因

你用requests.get获取的是页面初始的静态HTML,而表格内容是React在浏览器端动态渲染生成的,初始HTML里不存在ReactVirtualized__Grid__innerScrollContainer这类元素,所以BeautifulSoup无法找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:35:20