首页 > 解决方案 > 通过几年迭代日期来创建一个 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。

非常感谢!

标签: pythondatefor-loopweb-scrapingweb-crawler

解决方案


蟒蛇 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 扩展,但我现在试图让这个答案保持简单。


推荐阅读