如何使用Python将URL数据转CSV,解决导出为文本及多URL批量下载问题
现有代码问题说明
你当前输出为普通文本文件的核心原因是导出CSV时文件名未加.csv后缀,操作系统无法识别格式类型。另外代码存在冗余可优化:
- 不需要额外调用csv库做内容解析,pandas可直接读取下载的CSV文本内容
- 默认导出会写入冗余索引列,可通过参数关闭
修正后的单文件下载代码如下:
import pandas as pd import requests from datetime import datetime CSV_URL = 'https://dsv-ops-toolkit.ihsmvals.com/ftp?config=fenics-bgc&file=IRSDATA_20211129_1700_Intra.csv&directory=%2FIRS%2FIntraday%2FDaily' with requests.Session() as s: download = s.get(CSV_URL) decoded_content = download.content.decode('utf-8') # 直接用pandas读CSV内容,减少冗余步骤 df = pd.read_csv(pd.compat.StringIO(decoded_content)) date = datetime.now().strftime('%y%m%d') # 文件名加.csv后缀,关闭索引导出 df.to_csv(f'RFR_{date}.csv', index=False)
批量下载多个CSV实现方案
可以直接在脚本中配置URL列表实现批量下载,为了避免文件名重复覆盖,建议给每个URL配置对应的自定义文件名前缀,示例代码如下:
import pandas as pd import requests from datetime import datetime # 配置多个下载链接,格式为 (自定义文件名前缀, 下载URL) CSV_DOWNLOAD_TASKS = [ ('RFR_IRS_Intra', 'https://dsv-ops-toolkit.ihsmvals.com/ftp?config=fenics-bgc&file=IRSDATA_20211129_1700_Intra.csv&directory=%2FIRS%2FIntraday%2FDaily'), # 按相同格式添加更多下载任务即可 ('RFR_other1', 'https://example.com/xxx1.csv'), ('RFR_other2', 'https://example.com/xxx2.csv'), ] date = datetime.now().strftime('%y%m%d') with requests.Session() as s: for file_prefix, url in CSV_DOWNLOAD_TASKS: download = s.get(url) decoded_content = download.content.decode('utf-8') df = pd.read_csv(pd.compat.StringIO(decoded_content)) df.to_csv(f'{file_prefix}_{date}.csv', index=False)
内容的提问来源于stack exchange,提问作者Rahul Vaidya
相关产品推荐
相关产品推荐

