ここでは、「Web API」を用いたスクレイピング方法について解説しています。Web APIを使用することで、Webサイトから情報を取得し、自動的にデータを取得、加工、保存できます。
この記事の対象
APIとは
API(Application Programming Interface)とは、サイトが備えている機能を外部から利用できるようにした環境を指します。Web APIとは、Webサービスを利用するためのインターフェースになります。
例えば、スクレイピングを行う場合だったら、欲しい情報があるサーバーにアクセスして、その結果がXMLやJSONという形式で返ってきます。
端的に言うと、Web APIは、Webサービスが提供する様々な情報を取得するための方法になります。
メリット・デメリット
メリット
メリット | 内容 |
使い勝手が良い | 欲しい情報があるサーバーにアクセスして、その結果がXMLやJSON形式で返ってくるので、情報を抽出・解析するのが容易です。また、自動化などしてアプリ開発等の応用に活かせる。 |
サーバーの負荷軽減 | APIを提供している側からするとサーバーの負荷を軽減することができます。予めAPIを用意しておくことでクローリングによるサーバーへの負荷対策になります。 |
デメリット
デメリット | 内容 |
APIの変更・停止 | 企業・団体が提供しているAPIは規約が変更されたり、停止されたりすることが多いです。GoogleやAmazonなどの大手も含め、規約が変更されたり一部停止されたりします。 |
必ずしも「無料」とは限らない | APIは提供している企業や団体の有益情報なので、全てのAPIが無料では利用できません。中には太っ腹な企業があり、無料で利用できたりしますが、基本的にはお金を払ってライセンスを取得して利用します。 |
Requestsライブラリの使用
PythonでWeb APIを利用するためには、Requestsライブラリを使用します。Requestsライブラリは、HTTPリクエストを送信してWebサイトからデータを取得するためのライブラリです。
以下のコマンドを使用して、予めモジュールをインストールしておく必要があります。
pip install requests
Requestsライブラリを使用して、HTTP GETリクエストを送信してWebサイトからHTMLデータを取得することができます。たとえば、次のコードを使用して、Pythonの公式WebサイトからHTMLデータを取得することができます。
import requests
url = 'https://www.python.org/'
response = requests.get(url)
print(response.content)
JSONデータの取得
Web APIを使用する場合、JSONデータ形式でデータが返されることが多いです。JSONデータを扱うには、Pythonには標準のjsonモジュールがあります。JSONデータを取得する場合は、Requestsライブラリで取得したレスポンスのjson()
メソッドを使用します。次のコードは、GitHubのAPIからJSONデータを取得する例です。
import requests
url = 'https://api.github.com/users/octocat/repos'
response = requests.get(url)
data = response.json()
print(data)
APIを用いた使用例
import requests
import json
#1---api
api = "https://www.land.mlit.go.jp/webland/api/TradeListSearch?from=20151&to=20152&area=13"
headers = {'content-type': 'application/json'}
#2---HTTPリクエストヘッダー
response = requests.get(api,headers=headers)
#3---jsonの解析
for out_data in response.json()['data']:
print("取引の種類:" + out_data['Type'])
print("市区町村名:" + out_data['Municipality'])
print("地区名:" + out_data['DistrictName'])
print("面積(平方メートル):" + out_data['Area'])
print("取引価格(総額):" + out_data['TradePrice'])
if "BuildingYear" in out_data:
print("建築年:" + out_data['BuildingYear'])
上記のプログラムは、国土交通省「不動産取引価格情報取得API」を用いた任意の値、文字を出力する内容となっています。
以下は解説になります。
#1---api
api = "https://www.land.mlit.go.jp/webland/api/TradeListSearch?from=20151&to=20152&area=13"
headers = {'content-type': 'application/json'}
1の部分でAPIのURLを指定しています。この中に「from」「to」「area」があり、条件(パラメータ)を同時に指定しています。内容としては「平成27年第1四半期~平成27年第2四半期 東京都の不動産取引価格情報を取得する」を意味しています。
#2---HTTPリクエストヘッダー
response = requests.get(api,headers=headers)
2の部分では、HTTPのリクエストヘッダーを記述しています。「json」ファイルであることを示しています。
#3---jsonの解析
for out_data in response.json()['data']:
print("取引の種類:" + out_data['Type'])
print("市区町村名:" + out_data['Municipality'])
print("地区名:" + out_data['DistrictName'])
print("面積(平方メートル):" + out_data['Area'])
print("取引価格(総額):" + out_data['TradePrice'])
if "BuildingYear" in out_data:
print("建築年:" + out_data['BuildingYear'])
3の部分では取得したjsonファイルの解析を行い、「取引の種類」「市区町村名」「地区名」「面積(平方メートル)」「取引価格(総額)」「建築年」を取得して出力しています。
その他、APIを用いた使用例
項目 | 内容 |
Amazon | Under construction . . . |
楽天 | Under construction . . . |