【Python】天気予報データをスクレイピングする

 

Pythonが得意とするのがクローリングやスクレイピングです。

 

クローリングは、webページのハイパーリンクをたどって次々とwebページをダウンロードすることです。

 

スクレイピングは、ダウンロードしたwebページから必要な情報を取り出すことです。

 

今回の記事では、pythonで天気予報データを取得し必要な情報を抜き出して(スクレイピング)表示するプログラムを作ってみます。

 

 

requestsのインストール

 

スクレイピングをするのに、requestsというPythonのライブラリを使用します。

 

Anaconda Navigatorを使うかpipでインストールできます。

 

・Anaconda

Anaconda Navigatorでrequestsを検索しインストールしましょう。

 

・pip

$ pip install requests

 

requestsを使う

 

コードを書いていきます。

 

import pprint
import requests

r = requests.get('http://weather.livedoor.com/forecast/webservice/json/v1?city=130010')

pprint.pprint(r.json())

 

getを使って、ライブドアさんの気象ページからデータを取得します。pprintを使うと、jsonを見やすく整形してくれます。

 

 'forecasts': [{'date': '2018-09-30',
                'dateLabel': '今日',
                'image': {'height': 31,
                          'title': '暴風雨',
                          'url': 'http://weather.livedoor.com/img/icon/22.gif',
                          'width': 50},
                'telop': '暴風雨',
                'temperature': {'max': None, 'min': None}},
               {'date': '2018-10-01',
                'dateLabel': '明日',
                'image': {'height': 31,
                          'title': '晴時々雨',
                          'url': 'http://weather.livedoor.com/img/icon/3.gif',
                          'width': 50},
                'telop': '晴時々雨',
                'temperature': {'max': {'celsius': '34', 'fahrenheit': '93.2'},
                                'min': {'celsius': '24',
                                        'fahrenheit': '75.2'}}},
               {'date': '2018-10-02',
                'dateLabel': '明後日',
                'image': {'height': 31,
                          'title': '晴時々曇',
                          'url': 'http://weather.livedoor.com/img/icon/2.gif',
                          'width': 50},
                'telop': '晴時々曇',
                'temperature': {'max': None, 'min': None}}]

 

こんな感じで、3日分の気象データがdictで取得できます。ちなみに今日は台風が来ているので、暴風雨になっています笑

 

このデータから、必要な情報を取り出してみましょう。

 

import requests
import pprint

r = requests.get('http://weather.livedoor.com/forecast/webservice/json/v1?city=130010')

r_data = r.json()

d = r_data['forecasts']

for i in range(3):

    print("-----------------------------------")

    print(d[i]['dateLabel'] + ", " + d[i]['date'] + "の天気は「" + d[i]['telop'] + "」")

    max_temp = d[i]['temperature']['max']
    min_temp = d[i]['temperature']['min']

    if max_temp is not None:
        print("最高気温は" + max_temp["celsius"] + "度, 最低気温は" + min_temp['celsius'] + "度です。")
    else:
        print("気温は不明です。")

 

とりあえず、3日分の天気と、最高気温、最低気温を取り出してみました。

 

-----------------------------------
今日, 2018-09-30の天気は「暴風雨」
気温は不明です。
-----------------------------------
明日, 2018-10-01の天気は「晴時々雨」
最高気温は34度, 最低気温は24度です。
-----------------------------------
明後日, 2018-10-02の天気は「晴時々曇」
気温は不明です。

 

今日、明日、明後日の天気予報を取り出すことができました。

 

これを使えば、自分のwebサイトに天気データを載せることができます。

 

まとめ

・Pythonのrequestsを使うと、簡単にスクレイピングができる
・天気データ以外にも、株価や為替のデータを取得できる
・jsonデータの表示には、pprintが有効

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog