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

如何使用Python ElementTree替换日期字符串并解析XML数据

实现方案

前置准备

需要先安装网络请求库requests,执行命令:

pip install requests

完整可运行代码

from datetime import datetime, timedelta
import requests
import xml.etree.ElementTree as ET

# 1. 生成今日、昨日的格式化日期
today = datetime.today().strftime("%m/%d/%Y")
yesterday = (datetime.today() - timedelta(days=1)).strftime("%m/%d/%Y")
# 原始URL模板
URL_TEMPLATE = "https://www.mywesbite.com/report/%5B10/01/2021%22%7D"

def get_valid_report():
    # 按优先级先试今日、再试昨日
    for check_date in [today, yesterday]:
        # 替换URL中的日期(注意原模板里的日期是带前导零的10/01/2021,要替换完整)
        request_url = URL_TEMPLATE.replace("10/01/2021", check_date)
        try:
            # 发送请求,设置超时避免长时间卡住
            resp = requests.get(request_url, timeout=10)
            resp.raise_for_status() # 状态码非200时直接抛异常,进入下一个日期的尝试
            
            # 解析XML
            root = ET.fromstring(resp.content)
            # 查找record节点的report_date属性
            record_node = root.find(".//record")
            if not record_node:
                continue
            xml_report_date = record_node.get("report_date")
            
            # 校验日期是否匹配
            if xml_report_date == check_date:
                print(f"成功获取{check_date}的报告,开始解析")
                # 这里写你后续解析报告的逻辑
                return root
        except Exception as e:
            # 出现任何错误(请求失败、解析失败、日期不匹配)都尝试下一个日期
            print(f"获取{check_date}报告失败:{str(e)},尝试下一个日期")
            continue
    print("今日和昨日的报告都无法获取")
    return None

# 执行获取逻辑
report_root = get_valid_report()
if report_root:
    # 后续解析XML的逻辑可以写在这里
    pass

逻辑说明

  • 修正了你原有代码的两个问题:一是未导入datetime模块就使用,二是替换URL时用的10/1/2021和模板里的10/01/2021不匹配,会导致替换失效
  • 按优先级先尝试请求今日日期的报告,自动校验返回XML内的report_date字段,匹配就直接返回XML对象供后续解析
  • 今日报告请求失败、解析出错、日期不匹配时,自动降级请求昨日的报告
  • 加入了异常捕获,不会因为单次请求/解析错误导致程序直接崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:05