pythonを使ってオーロラ全天画像を収集する


はじめに

研究室の後輩がCNNを使った画像分類の練習をするらしく、それに利用するオーロラ全天画像の収集を命じられた。

オーロラ全天画像

全天画像とは上空180度、周囲360度を撮影した画像。これにオーロラを写した以下のような画像がオーロラ全天画像。
http://nordlys.nipr.ac.jp/acaurora/Syowa より引用
オーロラ全天画像を公開しているサイトは幾つかありますが、今回は国立極地研究所が公開する南極昭和基地で撮影された画像を収集します。

実装概要

画像は指定した日付の物をすべて収集するように実装します。
言語はpythonです、以下の機能を実装します。
・指定した日付の日別アーカイブページサイトにアクセス
・サイトのHTMLを簡易解析しaタグに含まれるhref属性内の画像URLを取り出す
・画像URLにアクセスし、画像をPCの指定ディレクトリに保存する

プログラム

解説は後々頑張ります...。とりあえず公開

import requests, os, bs4, urllib.request

#南極昭和基地が画像を公開するサイトのトップページURL
URL = "http://nordlys.nipr.ac.jp/acaurora/Syowa"

#画像を収集したい日付を指定
#2018年3月17日について収集したければ以下のようにする
Date = str(20180317)

#画像を保存するディレクトリパスの指定
#~の部分は任意で構いません、~以降の部分は以下のようにしてください
Dir_path = "C:/~/acaurora/Syowa/photo/"

#指定した日付に対し24時間分の画像を得るためのループ
for i in range(24):
    for j in range(6):
        #時間を4桁で指定、4桁に満たない場合は左端を0で埋める
        #例)11時:1100 -> 1100, 3時:300 -> 0300
        time = str(i*100 + j*10).zfill(4)
        #画像をダウンロードするディレクトリのパスの指定
        DL_dir_path = Dir_path + Date + "/" + Date + time
        #ディレクトリがなければ作成
        if(os.path.exists(DL_dir_path)==False):
            os.mkdir(DL_dir_path)
        #ダウンロードしたい画像がアーカイブされたページのURLを指定
        ArchiveURL = URL + "/photo/" + Date + "/" + Date + time + "/"
        #アーカイブページを取得
        res = requests.get(ArchiveURL)
        #beautifulsoupを使って取得したページの解析準備
        soup = bs4.BeautifulSoup(res.text, "html.parser")
        Prefix = "http://nordlys.nipr.ac.jp"
        Suffix = []
        for a in soup.find_all('a'):
            Suffix.append(a.get('href'))
        # Download Images from link URL
        for j in range(len(Suffix) - 1):
            DLink = Prefix + Suffix[j]
            title = DLink[69:87]
            print(title)
            title = DIR + "/" + title
            print(title)

            urllib.request.urlretrieve(DLink, "{0}".format(title))