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

如何用Python/BeautifulSoup提取德国气象局(DWD)网站HTML中的时间戳?

解决DWD预警页面时间戳无法抓取的问题

问题根源

你看到的时间戳是通过JavaScript动态渲染到页面上的,requests库只能获取服务器返回的静态初始HTML,不会执行页面中的JS代码,所以自然拿不到动态生成的时间戳内容。

可行解决方案

方案1:使用支持JS渲染的工具(如Selenium)

模拟真实浏览器加载页面,等待JS执行完成后再提取元素。

安装依赖:

pip install selenium

同时需要对应浏览器的驱动(树莓派可使用Chromium Driver)。

示例代码:

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.dwd.de/DE/wetter/warnungen_gemeinden/warnWetter_node.html?ort=Berlin-Mitte"

# 树莓派推荐用headless模式节省资源
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
driver = webdriver.Chrome(options=options)

try:
    driver.get(url)
    # 等待headerBox元素加载完成,最多等待10秒
    header_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "headerBox"))
    )
    # 提取包含时间戳的完整文本
    full_update_text = header_box.text
    print(full_update_text)
finally:
    driver.quit()

方案2:直接调用DWD官方API(更推荐)

爬取页面容易受页面结构变更影响,官方API是更稳定的数据源。DWD提供了预警相关的JSON API,可直接请求获取包含时间戳的结构化数据。

示例代码:

import requests

# 请求DWD预警数据API
api_url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json"
response = requests.get(api_url)
data = response.json()

# 筛选柏林-Mitte的预警数据
for region in data['warnings']:
    if region['regionName'] == 'Berlin-Mitte':
        print(f"最后更新时间: {region['timestamp']}")
        print(f"预警内容: {region['description']}")
        break

注:API端点可能会更新,可通过浏览器开发者工具的Network面板,抓取页面加载时的真实API请求地址。

树莓派适配提示

  • 使用Selenium时,建议安装轻量浏览器(如Chromium)及对应驱动,降低资源占用。
  • 可通过crontab设置定时任务,定期检查预警并触发邮件发送逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:09:54