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

如何从CAG网站下载2018-2022年3月的月度关键指标PDF文件

解决方案:按日期区间筛选下载PDF

核心逻辑是从PDF文件名中提取年月信息,判断是否在2018年3月-2022年3月区间内,符合条件才下载。

步骤1:处理日期解析

观察CAG网站的月度关键指标PDF文件名,通常包含Mar_2018这类英文月份+年份格式,先定义月份映射表,把英文缩写转成数字:

month_map = {
    'Jan': '01', 'Feb': '02', 'Mar': '03',
    'Apr': '04', 'May': '05', 'Jun': '06',
    'Jul': '07', 'Aug': '08', 'Sep': '09',
    'Oct': '10', 'Nov': '11', 'Dec': '12'
}

步骤2:修改下载逻辑,添加日期筛选

在原代码循环中加入日期判断逻辑,完整代码如下:

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 基础配置
url = "https://cag.gov.in/en/state-accounts-report?defuat_state_id=64"
folder_location = "./cag_pdfs"
tabID = "#tab-360"
# 用数值形式定义日期区间(YYYY*100 + MM),方便比较
start_date = 201803
end_date = 202203

# 创建存放文件夹(不存在则新建)
if not os.path.exists(folder_location):
    os.makedirs(folder_location)

# 页面请求与解析
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

month_map = {
    'Jan': '01', 'Feb': '02', 'Mar': '03',
    'Apr': '04', 'May': '05', 'Jun': '06',
    'Jul': '07', 'Aug': '08', 'Sep': '09',
    'Oct': '10', 'Nov': '11', 'Dec': '12'
}

for link in soup.select(f"{tabID} a[href$='.pdf']"):
    filename = link['href'].split('/')[-1]
    # 解析文件名中的年月(示例适配格式:"Monthly_Key_Indicators_Mar_2018.pdf")
    name_parts = filename.replace('.pdf', '').split('_')
    try:
        # 根据实际文件名结构调整索引,这里假设最后两位是月份缩写和年份
        month_abbr = name_parts[-2]
        year = name_parts[-1]
        month_num = month_map[month_abbr]
        file_date = int(f"{year}{month_num}")
    except (IndexError, KeyError):
        print(f"无法解析日期,跳过文件:{filename}")
        continue
    
    # 判断是否在目标区间内,符合则下载
    if start_date <= file_date <= end_date:
        full_path = os.path.join(folder_location, filename)
        with open(full_path, 'wb') as f:
            f.write(requests.get(urljoin(url, link['href'])).content)
        print(f"已下载:{filename}")
    else:
        print(f"不在目标区间,跳过:{filename}")

注意事项

  • 如果文件名格式是数字形式(如201803_Key_Indicators.pdf),可以直接取文件名前6位转成整数,无需月份映射表。
  • 建议先打印几个文件名,确认解析逻辑匹配实际格式,避免因文件名结构变化导致筛选失败。
  • 可添加time.sleep(1)这类延时,避免频繁请求触发网站反爬机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:15:41