http://weather.ap.polyu.edu.hk/displayHandler.php? year = 2018&month = 8&date = 19 &optStation = 6100&optElement = f1&isFlag =
大家好!我是一名建筑专业的学生,他正在尝试从气象站网站上收集一些数据。我对return collect([
['name' => 'Povilas','email'=>'povilas@laraveldaily.com'],
['name' => 'Taylor','email' => 'taylor@laravel.com']
])->each(function($value){
return $value; // Do what you want here
});
不太了解,所以我尝试使用名为web-crawling
的chrome浏览器下载以下链接的所有图像。
为此,我首先需要创建一个包含所有链接的CSV文件,我想知道是否有更快的方法可以在Python中使用data miner
来做到这一点。
从图片中我们可以看到,所有这些链接的唯一更改参数是日期期限。对于日期,我需要将其迭代3年。
我尝试用Python切片,但是有太多语句使我感到困惑。所以我想知道导入dates
是否可以帮助实现这一点。有人介意向我展示如何在这几年中进行迭代,并将年月日准确地放入URL中,并最终得到一个CSV文件吗?
我更喜欢使用Python。
非常感谢!
答案 0 :(得分:0)
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扩展名,但我现在尝试使此答案保持简单。