python - 通过几年迭代日期来创建一个 url 列表
问题描述
http://weather.ap.polyu.edu.hk/displayHandler.php ? 年=2018&月=8&日期=19 &optStation=6100&optElement=f1&isFlag=
大家好!我是一名建筑系学生,正在尝试从气象站网站上收集一些数据。我不太了解,web-crawling
所以我试图使用一个名为的chrome扩展data miner
来下载以下链接的所有图像。
为此,我首先需要创建一个包含所有链接的 CSV 文件,我想知道是否有更快的方法让我dates
在 Python 中使用它。
正如我们从图像中看到的,所有这些链接的唯一变化参数是日期期间。对于日期,我需要它迭代整整 3 年。
我曾尝试在 Python 中进行切片,但有太多的语句让我自己感到困惑。所以我想知道导入是否date
可以帮助解决这个问题。有谁介意向我展示我如何遍历这些年并将日月年准确地放入 URL 中,并最终得到一个 CSV 文件?
我更喜欢使用 Python。
非常感谢!
解决方案
蟒蛇 3
from datetime import datetime, timedelta
from urllib.parse import urlencode, urlparse, urlunparse
def all_dates(start_date, end_date):
current_date = start_date
one_day = timedelta(days=1)
while current_date != end_date:
yield current_date
current_date += one_day
yield current_date
def generate_url(date):
base_url = 'http://weather.ap.polyu.edu.hk/displayHandler.php'
parsed = urlparse(base_url)
query = urlencode({
'year': date.year,
'month': date.month,
'date': date.day,
'optStation': 6100,
'optElement': 'f1',
'isFlag': ''
})
return urlunparse((
parsed.scheme,
parsed.netloc,
parsed.path,
parsed.params,
query,
parsed.fragment
))
if __name__ == '__main__':
start_date = datetime(year=2015, month=1, day=1)
end_date = datetime(year=2018, month=1, day=1)
with open('outfile.csv', 'w') as f:
for date in all_dates(start_date, end_date):
f.write('{}\n'.format(generate_url(date)))
您没有回答确切的开始/结束日期应该是什么,所以我只需要猜测一个例子(2015 年 1 月 1 日 - 2018 年 1 月 1 日)。您可以简单地将这两个变量start_date
&更改end_date
为您想要的任何值。
outfile.csv
您也可以使用 Python 来下载这些图像,而不是使用 chrome 扩展,但我现在试图让这个答案保持简单。
推荐阅读
- git - 将文件设置为永不合并,并且每个分支始终保持不同
- apache-spark - 按部门 ID 计算员工数量并确定员工 ID 最多的前两个部门
- java - 我应该定义类属性原语(如果可能的话)还是应该使用 Wrapper 类?
- python - 如何合并具有不同行数和重叠索引的两个熊猫数据框?
- javascript - 数据表页面中的 JavaScript
- javascript - 检查 debounceTime() 中的 Observable 是否进展
- python - Bokeh Python:选择下拉列表正在更新 ColumnDataSource 但不更新图表
- javascript - 在 div 中加载 PHP 后捕获事件
- matlab - 为什么时频平面是颠倒的?
- android - Android 视觉 - 人脸、眼镜和帽子检测