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

Python每日爬取丹麦国家银行5种汇率追加至Excel方案咨询

最简可落地方案(适配Python初学者)

直接选学习成本最低、稳定性最高的技术组合,不用搞复杂框架:

  • 依赖安装:执行pip install requests beautifulsoup4 pandas openpyxl一次性装完所有需要的库
  • 网页请求用requests:代码量少,不用模拟浏览器,足够应付这个静态页面
  • 页面解析用BeautifulSoup4:语法简单,找表格、提数据比正则好上手太多
  • Excel读写用pandas+openpyxl引擎:不用手动操作Excel单元格,几行代码就能实现追加写入,不容易出格式错
  • 定时跑任务直接用系统自带工具:Windows用任务计划程序、Mac/Linux用crontab,比写Python死循环定时稳定10倍,电脑重启也能自动恢复

核心实现逻辑

  1. 发请求拿页面内容
    不要裸发请求,加个普通浏览器的User-Agent,加超时时间,避免被拦截或者挂死:
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    from datetime import datetime
    import os
    
    TARGET_CURRENCIES = ["USD", "EUR", "GBP", "JPY", "SEK"] # 替换成你需要的5种货币代码
    EXCEL_SAVE_PATH = "dn_exchange_rates.xlsx"
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    }
    url = "https://www.nationalbanken.dk/en/statistics/exchange_rates/pages/default.aspx"
    resp = requests.get(url, headers=headers, timeout=15)
    resp.raise_for_status() # 状态码不对直接抛错,避免拿错页面解析出垃圾数据
    
  2. 解析提取目标数据
    打开页面按F12定位到汇率对应的table标签,遍历行匹配你要的5种货币,提取币种、汇率值,加上当日日期字段:
    soup = BeautifulSoup(resp.text, "html.parser")
    rate_table = soup.find("table", attrs={"class": "table table-striped"}) # 按实际页面的表格属性调整定位规则
    rows = rate_table.find_all("tr")[1:] # 跳过表头行
    
    today_data = []
    current_date = datetime.now().strftime("%Y-%m-%d")
    for row in rows:
        cols = [col.text.strip() for col in row.find_all("td")]
        currency_code = cols[0] # 按实际表格列顺序调整索引
        if currency_code in TARGET_CURRENCIES:
            today_data.append({
                "record_date": current_date,
                "currency": currency_code,
                "exchange_rate": float(cols[2].replace(",", ".")) # 转换欧洲格式的逗号小数点为标准点号
            })
    
    # 校验数据完整性
    if len(today_data) != len(TARGET_CURRENCIES):
        raise ValueError(f"缺失目标货币汇率,仅拿到{len(today_data)}种,爬取终止")
    
    df_today = pd.DataFrame(today_data)
    
  3. 追加写入Excel
    自动判断文件是否存在,存在就追加,不存在就新建,写入前去重避免重复存当天数据:
    if os.path.exists(EXCEL_SAVE_PATH):
        df_old = pd.read_excel(EXCEL_SAVE_PATH, engine="openpyxl")
        # 剔除已存在的当日数据,避免重复写入
        df_old = df_old[df_old["record_date"] != current_date]
        df_final = pd.concat([df_old, df_today], ignore_index=True)
    else:
        df_final = df_today
    
    df_final.to_excel(EXCEL_SAVE_PATH, index=False, engine="openpyxl")
    
开发重点注意事项
  • 别上来就用Selenium/Playwright这类浏览器自动化工具:这个页面是静态渲染的,直接发请求就能拿数据,上自动化工具不仅装环境麻烦,还容易因为浏览器驱动版本、页面加载慢出各种幺蛾子,新手hold不住。
  • 数据格式要统一:欧洲网站的小数默认用逗号分隔,爬下来要替换成点再转成数值类型,不然存到Excel里是文本,没法做计算。日期格式固定成YYYY-MM-DD,别用带斜杠或者本地化的格式,后续筛选排序更方便。
  • 防数据损坏:写Excel的时候一定要确保文件是关闭状态,被其他程序占用的话会直接报错。稳妥点可以每次写入前把旧文件复制一份加个日期后缀当备份,就算代码写崩了也不会丢历史数据。
  • 定时任务别踩坑:不要写while True + time.sleep(86400)的循环定时,电脑关机、程序闪退就会中断任务,用系统自带的定时工具最稳。执行时间选在丹麦央行更新汇率之后,别爬早了拿到前一天的旧数据。
  • 反爬不用过度紧张:你一天只爬1次,加个正常User-Agent就不会被封,没必要买代理、搞IP池,纯浪费成本。
  • 异常要加捕获:网络波动、页面结构微调都可能导致爬取失败,给核心逻辑加try-except,失败了打印错误日志就行,别让程序直接闪退,也别把错误的空数据写到Excel里。

内容的提问来源于stack exchange,提问作者B.Birgovan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:31:03