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

如何从API提取多个CSV文件并合并为单个CSV文件?

多API返回CSV合并实现方案

核心思路

  • 先将你需要拉取的总时间区间拆分为多个长度≤90天的连续子区间,注意前后区间的日期不要重叠也不要留空
  • 逐个请求对应子区间的API接口,读取返回的CSV内容
  • 仅保留第一个CSV的表头行,后续所有CSV跳过表头只保留数据行
  • 把所有内容拼接后写入同一个CSV文件即可

方案1:Python实现(最通用,支持Windows/Mac/Linux)

需要先安装依赖:pip install requests pandas
替换代码内对应参数后直接运行即可:

import requests
import pandas as pd
from datetime import datetime, timedelta

# 此处替换为你自己的实际参数
PROPERTY_ID = "你的propertyid"
API_KEY = "你的keygoeshere"
# 总查询起止日期
START_DATE = datetime(2021, 1, 1)
END_DATE = datetime(2023, 12, 31)
# 输出文件路径
OUTPUT_FILE = "merged_article_data.csv"

# 自动拆分最多90天的子区间
date_ranges = []
current_start = START_DATE
while current_start < END_DATE:
    # 取89天留余量,避免刚好90天触发接口限制
    current_end = min(current_start + timedelta(days=89), END_DATE)
    date_ranges.append((current_start.strftime("%Y-%m-%d"), current_end.strftime("%Y-%m-%d")))
    current_start = current_end + timedelta(days=1)

all_dfs = []
for start, end in date_ranges:
    # 拼接请求URL
    url = f"https://www.metricsfornews.com/app/api.php?propertyid={PROPERTY_ID}&apitype=articledata&key={API_KEY}&start_pub_date={start}&end_pub_date={end}&include_metrics=1&format=csv"
    resp = requests.get(url)
    # 接口报错时直接终止,方便排查问题
    resp.raise_for_status()
    # 读取CSV内容到数据表
    df = pd.read_csv(pd.compat.StringIO(resp.text))
    all_dfs.append(df)

# 合并所有数据并导出
merged_df = pd.concat(all_dfs, ignore_index=True)
merged_df.to_csv(OUTPUT_FILE, index=False, encoding="utf-8-sig")
print(f"合并完成,共{len(merged_df)}条数据,已保存到{OUTPUT_FILE}")

如果不想安装pandas,也可以用Python标准库实现:

import requests
import csv
from io import StringIO
from datetime import datetime, timedelta

# 同上替换为你的实际参数
PROPERTY_ID = "你的propertyid"
API_KEY = "你的keygoeshere"
START_DATE = datetime(2021, 1, 1)
END_DATE = datetime(2023, 12, 31)
OUTPUT_FILE = "merged_article_data.csv"

# 时间区间拆分逻辑同上
date_ranges = []
current_start = START_DATE
while current_start < END_DATE:
    current_end = min(current_start + timedelta(days=89), END_DATE)
    date_ranges.append((current_start.strftime("%Y-%m-%d"), current_end.strftime("%Y-%m-%d")))
    current_start = current_end + timedelta(days=1)

first_run = True
with open(OUTPUT_FILE, "w", newline="", encoding="utf-8-sig") as out_f:
    writer = csv.writer(out_f)
    for start, end in date_ranges:
        url = f"https://www.metricsfornews.com/app/api.php?propertyid={PROPERTY_ID}&apitype=articledata&key={API_KEY}&start_pub_date={start}&end_pub_date={end}&include_metrics=1&format=csv"
        resp = requests.get(url)
        resp.raise_for_status()
        reader = csv.reader(StringIO(resp.text))
        if first_run:
            # 第一次请求保留表头
            writer.writerow(next(reader))
            first_run = False
        else:
            # 后续请求跳过表头
            next(reader)
        # 写入所有数据行
        for row in reader:
            writer.writerow(row)

方案2:Linux/Mac Shell命令行实现(无需额外安装依赖)

替换变量后直接在终端运行即可:

# 替换为你的实际参数
propertyid="你的propertyid"
apikey="你的keygoeshere"
# 总查询起止日期
start="2021-01-01"
end="2021-12-31"
output="merged.csv"

first=1
current_start="$start"
while [ "$(date -d "$current_start" +%s)" -le "$(date -d "$end" +%s)" ]; do
    current_end=$(date -d "$current_start +89 days" +%Y-%m-%d)
    if [ "$(date -d "$current_end" +%s)" -gt "$(date -d "$end" +%s)" ]; then
        current_end="$end"
    fi
    # 请求API拉取CSV
    csv_content=$(curl -s "https://www.metricsfornews.com/app/api.php?propertyid=$propertyid&apitype=articledata&key=$apikey&start_pub_date=$current_start&end_pub_date=$current_end&include_metrics=1&format=csv")
    if [ $first -eq 1 ]; then
        # 第一次请求保留表头
        echo "$csv_content" > "$output"
        first=0
    else
        # 后续请求跳过第一行表头
        echo "$csv_content" | tail -n +2 >> "$output"
    fi
    current_start=$(date -d "$current_end +1 day" +%Y-%m-%d)
    # 可选:加1秒延时避免触发接口限流
    sleep 1
done

注意事项

  • 如果接口有频率限制,可在两次请求之间加1-2秒延时,Python代码中加time.sleep(1)、Shell代码中加sleep 1即可
  • 导出的CSV如果用Excel打开乱码,选择utf-8编码打开即可正常显示
  • 如果需要导出为Excel格式,Python方案中把最后的to_csv方法改为to_excel即可,需要额外安装依赖pip install openpyxl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:21:04