在Python中遍历日期范围

5

好的,我相对新手编程,这让我完全困惑。我正在从一个网站上爬取数据,而且数据每周都会更改。我想在数据更改时每次运行我的爬取过程,从2015年9月9日开始运行到现在。

我知道如何轻松地运行每个数字,比如0909,然后是0910,然后是0911,但那不是我需要的,因为那将向服务器请求太多无用的请求。

这是URL的格式: http://www.myexamplesite.com/?date=09092015

我知道简单的:

for i in range(startDate, endDate):
    url = 'http://www.myexamplesite.com/?date={}'.format(i)
    driver.get(url)

但是有一件事情我一直无法理解,就是如何操作Python的dateTime来准确反映网站使用的格式。

例如: 09092015 09162015 09232015 09302015 10072015 ... 09272017

如果其他方法都失败了,我只需要这样做一次,因此忽略循环并手动输入我希望从中抓取的日期,然后将所有数据框附加在一起也不会花费太长时间。我主要是想知道如何在这种情况下操作datetime函数,以备未来可能需要更多数据的项目。

2个回答

9
一个好的起点是阅读datetimedatetimedelta对象文档。
首先,让我们构建起始日期和结束日期(今天):
>>> from datetime import date, timedelta
>>> start = date(2015, 9, 9)
>>> end = date.today()
>>> start, end
(datetime.date(2015, 9, 9), datetime.date(2017, 9, 27))

现在让我们定义增量单位——一天:
>>> day = timedelta(days=1)
>>> day
datetime.timedelta(1)

关于日期(date/datetime)和时间差(timedelta)的一个好处是它们可以相加。
>>> start + day
datetime.date(2015, 9, 10)

我们也可以使用 format() 来以人类可读的形式获取该日期:
>>> "{date.day:02}{date.month:02}{date.year}".format(date=start+day)
'10092015'

所以,当我们把所有这些放在一起时:

from datetime import date, timedelta

start = date(2015, 9, 9)
end = date.today()
week = timedelta(days=7)

mydate = start
while mydate < end:
    print("{date.day:02}{date.month:02}{date.year}".format(date=mydate))
    mydate += week

我们从2015-09-09开始迭代日期,到今天为止,每次增加7天(一周):
09092015
16092015
23092015
30092015
07102015
...

啊哈!谢谢。timedelta 是我缺少的增量类型。 - Stu Kruske

1

啊,谢谢!这确实有助于格式化,我只是按照这种方式进行操作: startDate = datetime(2015,9,9) formatDate = startDate.strftime("%Y")+startDate.strftime("%m")+startDate.strftime("%d") - Stu Kruske

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接