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文件会存在多个迭代版本。我们可以通过以下步骤自动获取最新版本的文件:
核心思路
- 匿名连接到NOAA的FTP服务器
- 切换到目标文件所在目录
- 筛选出对应年份的
StormEvents_details文件 - 根据文件名中的日期后缀,筛选出最新版本的文件
- 构造完整下载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
相关产品推荐
相关产品推荐

