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サイトに天気データを載せることができます。
まとめ
・天気データ以外にも、株価や為替のデータを取得できる
・jsonデータの表示には、pprintが有効