首页 > 解决方案 > 在Python中按日期从http下载多个XLS文件

问题描述

有一个通用网址可以链接到数据库中的任何 XLS 文件。您不能通过 ftp 或直接通过目录访问它,但您可以通过将日期参数传递到 http 地址本身来下载。

http是:

https://docs.misoenergy.org/marketreports/YYYYMMDD_sr_gfm.xls

用户可以将YYYYMMDD更改为实际日期,并且该地址可用于下载 xls 文件(每天)。

我希望能够循环访问这些文件,并通过替换 YYYY 和 MM 和 DD 从给定的开始日期结束日期下载它们,因此从 2003-01-01 开始并运行到当前时间 2018-12-06。

我将如何开始这个?

标签: pythonpython-3.xpython-2.7web-scrapingurllib

解决方案


以下应该有效:

from datetime import date, timedelta

import requests

d1 = date(2018, 8, 15)  # start date
d2 = date(2018, 8, 25)  # end date

delta = d2 - d1

url_pattern = 'https://docs.misoenergy.org/marketreports/%s'
file_pattern = '%s_sr_gfm.xls'

for i in range(delta.days + 1):
    filename = file_pattern % str(d1 + timedelta(i)).replace('-', '')
    print(filename)

    response = requests.get(url_pattern % filename, stream=True)
    response.raise_for_status()

    with open(filename, 'wb') as handle:
        for block in response.iter_content(1024):
            handle.write(block)

推荐阅读