Help us understand the problem. What is going on with this article?

無料お天気APIで簡単スクレイピング

More than 1 year has passed since last update.

はじめに

本記事は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」のリストが取得できます。

Brutus
DevOpsとAIの二刀流を目指すLinuxエンジニア。Python、RaspberryPi、Linux、Docker、k8s、セキュリティ、Oracle Cloud、Terraform、Ansible等について発信しています。登壇、執筆等あれば、Twitterよりメッセージお願いします。
https://brutus.ml/
gauss
株式会社GAUSSは、AIソフトウェアを組み込んだサーバの提供、AIサービス構築のコンサルティング、AIのエンジニア育成をセットにしてサービス提供を展開するスタートアップ企業です。
https://gauss-ai.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした