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

Python实现指定水文站日最大流量数据提取需求咨询

Python提取水文站日最大流量动态数据方案

因为目标站点是动态渲染页面,普通的requests/bs4无法获取JS加载的表格数据,用Selenium模拟浏览器操作是最直接的解决方案。以下是完整的可运行代码,实现输入水文站编码即可导出自建站至今的「日最大流量」数据到CSV。

依赖安装

先安装所需库:

pip install selenium pandas webdriver-manager

完整代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd

def extract_daily_max_flow(station_code, output_file='daily_max_flow.csv'):
    # 初始化Chrome浏览器(自动匹配驱动版本)
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    try:
        # 构造目标URL
        url = f"https://hydro.eaufrance.fr/sitehydro/{station_code}/series"
        driver.get(url)
        
        # 等待页面加载,选择「日最大流量」数据项
        wait = WebDriverWait(driver, 10)
        # 定位日最大流量选项(根据页面实际元素调整xpath)
        flow_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//label[contains(text(), 'Débit maximal journalier')]")))
        flow_option.click()
        
        # 选择日期范围为「自建站至今」
        date_range_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//select[@id='periodeSelect']/option[contains(text(), 'Depuis la création')]")))
        date_range_option.click()
        
        # 点击确认按钮加载数据
        confirm_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@id='validerPeriode']")))
        confirm_btn.click()
        
        # 等待表格加载完成
        wait.until(EC.presence_of_element_located((By.ID, "tableauDonnees")))
        
        # 提取表格数据到DataFrame
        table = driver.find_element(By.ID, "tableauDonnees")
        df = pd.read_html(table.get_attribute('outerHTML'))[0]
        
        # 导出为CSV
        df.to_csv(output_file, index=False, encoding='utf-8-sig')
        print(f"数据已成功导出到 {output_file}")
        
        return df
    finally:
        # 确保浏览器关闭
        driver.quit()

# 调用示例:提取巴黎水文站数据
extract_daily_max_flow('F7000001')

关键说明

  • 元素定位:代码中的XPath是基于页面当前结构编写的,如果后续站点UI更新,需要检查元素的ID或文本内容调整XPath。
  • 等待机制:用WebDriverWait替代硬等待,确保元素加载完成后再操作,避免报错。
  • 驱动管理:webdriver-manager会自动下载匹配当前Chrome版本的驱动,无需手动配置。
  • 编码设置:导出CSV时用utf-8-sig,确保特殊字符能正常显示。

注意事项

  • 如果使用Firefox,只需把Chrome相关代码替换为webdriver.Firefox和GeckoDriverManager。
  • 若遇到反爬机制,可添加隐式等待、随机延迟,或配置浏览器无头模式(添加options.add_argument('--headless=new'))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:35:19