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

使用Python抓取Wunderground网站小时预报表格失败的问题求助

解决Wunderground小时预报页面动态内容抓取问题

你观察得太到位了!这个页面的hourly-forecast-table表格是JavaScript动态渲染生成的,这就是为什么你用requests拿不到它的原因——requests只能获取服务器返回的初始静态HTML,而浏览器里看到的表格是页面加载后,通过JS异步拉取数据再渲染出来的,所以静态源码里根本找不到这个表格,自然用XPath或者BeautifulSoup抓不到。

可行的解决办法

方法一:用浏览器自动化工具模拟加载(Selenium)

这种方法模拟真实浏览器的整个加载流程,能完整渲染出动态生成的内容,适合快速解决问题。

首先得安装依赖:

pip install selenium

还要对应安装浏览器驱动(比如ChromeDriver,要和你的Chrome版本匹配)。

示例代码:

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
import pandas as pd

# 初始化Chrome浏览器(如果驱动不在系统PATH里,需要指定executable_path参数)
driver = webdriver.Chrome()
target_url = 'https://www.wunderground.com/hourly/es/barcelona/IBARCE215/date/2022-07-25'
driver.get(target_url)

# 等待表格加载完成(最多等10秒,避免网络延迟导致找不到元素)
wait = WebDriverWait(driver, 10)
table_element = wait.until(EC.presence_of_element_located((By.ID, 'hourly-forecast-table')))

# 直接把表格转成DataFrame,省去手动解析的麻烦
forecast_df = pd.read_html(table_element.get_attribute('outerHTML'))[0]

# 用完浏览器记得关闭
driver.quit()

# 查看抓取结果
print(forecast_df.head())

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

浏览器渲染页面时一定会调用后端API获取数据,我们可以通过开发者工具找到这个接口,直接请求它拿到结构化的JSON数据,比模拟浏览器更快、更稳定。

操作步骤:

  1. 打开Chrome开发者工具(快捷键F12),切换到「网络」面板
  2. 刷新目标页面,在XHR/fetch类型的请求里,找包含小时预报数据的接口(通常URL里会有forecast、hourly这类关键词)
  3. 复制这个接口的URL,检查请求头里的参数(比如是否需要特定的User-Agent),然后用requests直接请求

示例代码(这里的API URL是假设的,你需要自己抓包得到真实接口):

import requests
import pandas as pd

# 替换成你抓包得到的真实API地址
api_url = "https://api.wunderground.com/api/your-api-key/hourly10day/q/IBARCE215.json"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get(api_url, headers=headers)
data = response.json()

# 提取小时预报数据并转为DataFrame
hourly_forecasts = data['hourly_forecast']
forecast_df = pd.DataFrame(hourly_forecasts)

print(forecast_df.head())

注意:部分API可能有请求频率限制或者需要认证,你需要根据抓包到的请求信息调整参数。

为啥之前的方法在其他网站能用?

你提到的那些网站(比如worldometers、pokemondb)的表格是直接在服务器生成好,放到静态HTML里返回的,所以requests拿到的源码里就有完整的表格结构,自然用XPath或BeautifulSoup就能直接抓取到~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:17:41