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

Python 3.x中能否检测含编辑日期的URL动态变化及获取对应CSV数据

回答你的两个Python网络数据获取问题

1. Python 3.x是否可以检查带编辑日期的网页/URL动态变化?

当然可以!Python 3.x提供了丰富的库来处理这类动态URL的监测和获取,具体方法取决于目标资源的协议类型:

  • FTP资源:可以直接连接FTP服务器,获取目录内的文件列表,通过分析文件名中的日期后缀来追踪最新版本(就像你遇到的NOAA例子)。
  • HTTP资源:可以通过请求资源的HTTP头部信息(比如Last-Modified字段),或者解析包含文件列表的网页内容,来判断资源是否更新或定位到最新版本的URL。

2. 解决带动态编辑日期的NOAA FTP CSV文件获取问题

针对你提到的NOAA风暴数据FTP链接,_c20180418这个后缀代表文件的创建/更新日期,同一个年份的details文件会存在多个迭代版本。我们可以通过以下步骤自动获取最新版本的文件:

核心思路

  1. 匿名连接到NOAA的FTP服务器
  2. 切换到目标文件所在目录
  3. 筛选出对应年份的StormEvents_details文件
  4. 根据文件名中的日期后缀,筛选出最新版本的文件
  5. 构造完整下载URL并完成文件获取

完整代码示例

from ftplib import FTP
import urllib.request

# 配置参数,可按需修改
FTP_SERVER = "ftp.ncdc.noaa.gov"
TARGET_DIR = "/pub/data/swdi/stormevents/csvfiles/"
TARGET_YEAR = "2018"

try:
    # 匿名登录FTP服务器(NOAA的FTP支持匿名访问)
    ftp = FTP(FTP_SERVER)
    ftp.login()
    print(f"成功连接到FTP服务器: {FTP_SERVER}")

    # 切换到目标文件目录
    ftp.cwd(TARGET_DIR)
    print(f"已进入目标目录: {TARGET_DIR}")

    # 获取目录下所有文件列表
    file_list = ftp.nlst()

    # 筛选出目标年份的StormEvents details文件
    filtered_files = [
        file for file in file_list
        if file.startswith(f"StormEvents_details-ftp_v1.0_d{TARGET_YEAR}_c")
        and file.endswith(".csv.gz")
    ]

    if not filtered_files:
        print(f"未找到{TARGET_YEAR}年的StormEvents details文件")
    else:
        # 按日期后缀排序,取最新版本
        # 提取_c后的日期字符串转成整数,降序排序
        filtered_files.sort(
            key=lambda x: int(x.split("_c")[-1].split(".")[0]),
            reverse=True
        )
        latest_file = filtered_files[0]
        full_download_url = f"ftp://{FTP_SERVER}{TARGET_DIR}{latest_file}"

        print(f"找到最新版本文件: {latest_file}")
        print(f"开始下载: {full_download_url}")

        # 下载文件到本地
        urllib.request.urlretrieve(full_download_url, f"StormEvents_details_{TARGET_YEAR}_latest.csv.gz")
        print("文件下载完成!")

finally:
    # 确保FTP连接被关闭
    if 'ftp' in locals():
        ftp.quit()

额外扩展

  • 如果你需要定期监测该目录的文件更新,可以将这段脚本封装成函数,定期运行时对比本地保存的最新文件名和服务器上的最新文件名,判断是否有新版本需要下载。
  • 对于HTTP资源的动态URL监测,你可以用requests库获取响应头或页面内容:
    import requests
    
    # 示例:检查HTTP资源的最后修改时间
    target_url = "http://example.com/your-target-file.csv"
    response = requests.head(target_url)
    if 'Last-Modified' in response.headers:
        print(f"资源最后修改时间: {response.headers['Last-Modified']}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:04:53