はじめに

本記事はOpenWeatherMapの使い方を踏まえたスクレイピングの基礎についてのまとめです。

OpenWeatherMapは、世界中:earth_asia:の代表的な都市の天気情報:sunny:を取得することができるAPIを無料(※)で公開してます。

スクリーンショット 2018-03-25 10.33.41.png

(※)無料プランの場合は1分間に60回までAPIを呼びだすことができます。ご注意ください。

OpenWeatherMap からAPIキーの取得

OpenWeatherMapのAPIを利用するためにはAPIキーが必要になります。

  1. OpenWeatherMapのサインアップのページにアクセスして、「Username、「Email」、「Password」、「Repeat Password」を入力し、「I agree to ...」(サイトポリシーへの同意)と「私はロボットではありません」にチェックして、Create Accountのボタンをクリックします。
    スクリーンショット 2018-03-25 10.41.15.png

  2. アカウント作成後、入力したメールアドレスにメールが送られきて登録が完了(※)になります。

(※)APIキーのアクティベーションは少し時間がかかります

OpenWeatherMapの利用方法

APIの利用方法はとても簡単です。APIキーのアクティベーションが有効になり次第、まずはブラウザで使えることを確認します。

東京の天気情報を取得する場合(華氏)

# [書式] (※)APIキーには取得したAPIキーを入力します
http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&appid=(※)APIキー

APIの実行結果はJSONで、{ key1: value1, key2: value2 ... }のような形式で出力されます。
「description」キーの値が「clear sky」となっているので、今日は曇り:cloud:ということが分かりますが、特に指定がない場合は華氏(アメリカや一部の英語圏で使われている温度の単位)で出力されるため少し分かりずらいです。

スクリーンショット 2018-03-25 10.56.52.png

東京の天気情報を取得する場合(摂氏)

単位(unit)や言語(lang)のパラメータを追加して、出力結果をカスタマイズして分かりやすくします。また、形式(mode)でxmlを指定してxmlで出力させます。

# [書式] (※)APIキーには取得したAPIキーを入力します
http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&units=metric&lang=ja&mode=xml&appid=(※)APIキー

今度はxml形式で出力され、今日の天気が日本語表示及び摂氏(日本を含む多くの国で使われている温度の単位)で表示されているので分かりやすいです。:sunny:

スクリーンショット 2018-03-25 11.17.37.png

Pythonでスクレイピング

Pythonでは、Webサイトにあるデータを取得するためには「urllib」ライブラリを使用します。また、取得したデータを抽出するためには「BeautifulSoup」ライブラリを使用します。

「urllib」でAPIの実行結果を出力

上記ブラウザでやったことをpythonで実行するプログラムです。APIの実行結果で今日の天気を日本語で出力させるために、「decode」メソッドで変換させています。

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import urllib.request as req

API = "http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&units=metric&lang=ja&mode=xml&appid=(※)APIキー"

url = API
print("url=", url)
print("")

data = req.urlopen(url).read()
text = data.decode("utf-8")
print(text)

(※)APIキーには取得したAPIキーを入力します

実行結果

スクリーンショット 2018-03-25 11.30.43.png

「BeautifulSoup」でスクレイピング

スクレイピングするときは必要なデータ(今日の天気)として、xml形式の場合「weather」要素の「value」属性を抽出したいです。
まずは「BeautifulSoup」をインストールします。

$ pip3 install beautifulsoup4

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import urllib.request as req
import sys
# BeautifulSoupのパスを通す
sys.path.append('/home/pi/.local/lib/python3.5/site-packages/')
from bs4 import BeautifulSoup

API = "http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&units=metric&lang=ja&mode=xml&appid=(※)APIキー"

url = API
print("url=", url)
print("")

data = req.urlopen(url).read()
text = data.decode("utf-8")
print(text)
print("")

# インスタンスの「weathre」要素を抽出
soup = BeautifulSoup(text, "html.parser")
weather = soup.find("weather")
print(weather)
print("")

# インスタンスの「weathre」要素の「value」属性を抽出
weather = soup.weather.get("value")
print(weather)

(※)APIキーには取得したAPIキーを入力します

実行結果

スクリーンショット 2018-03-25 13.14.35.png

今日の天気は「晴天」:sunny:というデータが抽出できました。

さいごに

これで世界中の天気の情報はいつでも簡単に取得できます。

参考

APIで指定する都市名のパラメータは、公式のHow to get accurate API responseより、「city ID」を指定することで正確な情報が取得できる記載があります。「Cities' IDs list.」のリンクより「city ID」のリストが取得できます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.