Python解析XML拆分SKU批次请求 分片存储XML结果方案
分批次处理SKU请求并输出独立XML文件实现方案
核心实现逻辑
- 先一次性读取所有SKU存入列表,减少XML树重复遍历开销
- 按自定义批次大小拆分SKU列表,默认单批次处理300个SKU
- 单批次内完成所有请求后统一写入对应批次的XML文件,文件按批次序号命名避免覆盖
- 可配置请求间隔,避免触发接口限流规则
完整可运行代码
import xml.etree.ElementTree as ET import requests import time # 可配置参数 BATCH_SIZE = 300 # 单批次处理SKU数量 REQUEST_INTERVAL = 0.5 # 单次请求间隔(秒),可根据接口要求调整 OUTPUT_FILE_PREFIX = "sku_batch" # 输出文件前缀 # 读取XML获取所有SKU tree = ET.parse('products.xml') root = tree.getroot() # 过滤空SKU避免无效请求 sku_list = [sku.text.strip() for sku in root.iter('SKU') if sku.text and sku.text.strip()] total_sku = len(sku_list) print(f"共读取到{total_sku}个有效SKU,将按每批{BATCH_SIZE}个拆分处理") # 按批次拆分处理 for batch_num, start_idx in enumerate(range(0, total_sku, BATCH_SIZE), start=1): end_idx = min(start_idx + BATCH_SIZE, total_sku) current_batch = sku_list[start_idx:end_idx] batch_response_content = [] print(f"开始处理第{batch_num}批次,SKU范围:{start_idx+1} - {end_idx}") # 处理当前批次内所有SKU请求 for sku in current_batch: try: response = requests.get(f'http://example.com/Items?ID={sku}', timeout=10) response.raise_for_status() # 请求失败抛出异常 batch_response_content.append(response.text) time.sleep(REQUEST_INTERVAL) except Exception as e: print(f"SKU {sku} 请求失败,错误信息:{str(e)}") continue # 写入当前批次结果到独立XML文件 output_file_name = f"{OUTPUT_FILE_PREFIX}_{batch_num}_{start_idx+1}_{end_idx}.xml" with open(output_file_name, "w", encoding="utf-8") as f: # 可根据需求调整批次文件内容拼接逻辑,此处直接拼接所有返回内容 f.write("\n".join(batch_response_content)) print(f"第{batch_num}批次处理完成,结果已写入{output_file_name}") print("所有批次处理完成")
关键优化点说明
- 批次输出的文件名包含批次号和对应SKU序号范围,方便后续排查问题
- 增加了基础的异常捕获逻辑,单个SKU请求失败不会中断整批任务
- 支持自定义批次大小和请求间隔,可根据实际接口性能灵活调整
- 提前过滤了空值SKU,避免发起无效请求浪费资源
内容的提问来源于stack exchange,提问作者user14878631
相关产品推荐
相关产品推荐

