見出し画像

【Python】郵便番号APIで郵便番号から地名情報を取得するサンプルコード


日本の郵便番号データを取得するためのスクレイピング方法をPythonで解説します。ここでは、http://zip.cgis.biz/のAPIを利用して郵便番号データを取得する方法について説明します。

具体的には、Pythonのrequestsライブラリを使ってAPIにアクセスし、取得したデータを処理します。

必要なライブラリのインストール

まず、HTTPリクエストを送信するためにrequestsライブラリをインストールします。

$ pip install requests


APIドキュメントの確認

http://zip.cgis.biz/は、郵便番号データを提供する無料のAPIです。詳細なAPIドキュメントはサイト上で提供されています。以下は、郵便番号を使って住所データを取得するための基本的な手順です。



import requests
import xml.etree.ElementTree as ET

# 郵便番号を指定
zip_code = '1500002'

# APIエンドポイント
url = f'http://zip.cgis.biz/xml/zip.php?zn={zip_code}'

# APIリクエストを送信
response = requests.get(url)

# レスポンスの確認
if response.status_code == 200:
    root = ET.fromstring(response.text)

    # ADDRESS_value セクションを見つける
    address_values = root.find('ADDRESS_value')

    # 各value要素から情報を抽出
    for value in address_values.findall('value'):
        for attr in value.attrib:
            print(f'{attr}: {value.attrib[attr]}')


<実行結果>

state_kana: トウキョウト
city_kana: シブヤク
address_kana: シブヤ(ツギノビルヲノゾク)
company_kana: none
state: 東京都
city: 渋谷区
address: 渋谷(次のビルを除く)
company: none


上記のPythonスクリプトは、`http://zip.cgis.biz/` ウェブサイトのAPIを使用して、指定した郵便番号(1500002)に関連する住所データをXML形式で取得し、解析しています。ここでは、スクリプトの各部分を詳しく解説します。

コードの解説

1. ライブラリのインポート

import requests
import xml.etree.ElementTree as ET
  • `requests`: このライブラリはHTTPリクエストを簡単に送信するために使われます。APIへのGETリクエストを行う際に使用します。

  • `xml.etree.ElementTree (ET)`: このライブラリはXMLデータの解析と操作を行うために使用されます。XMLデータをパースし、その内容をプログラムで扱いやすい形にします。

2. 郵便番号の指定とAPIエンドポイントの設定

zip_code = '1500002'
url = f'http://zip.cgis.biz/xml/zip.php?zn={zip_code}'
  • 郵便番号 `1500002` を変数に格納し、APIエンドポイントのURLを構成します。このURLは、指定された郵便番号に基づく住所情報を取得するために用いられます。

3. APIリクエストの送信

response = requests.get(url)
  • `requests.get()` 関数を使って、設定したURLにHTTP GETリクエストを送信します。この関数はサーバーからのレスポンスを含む `response` オブジェクトを返します。

4. レスポンスの確認とXMLデータの解析

if response.status_code == 200:
    root = ET.fromstring(response.text)
  • `response.status_code` が200の場合、リクエストが成功したことを意味します。成功した場合のみ、レスポンスボディ(`response.text`)からXMLデータを取得し、`ET.fromstring()` 関数によってパースします。これにより、XMLデータがElementTree(DOM)のルート要素に変換されます。

5. ADDRESS_valueセクションの探索とデータの抽出

address_values = root.find('ADDRESS_value')
for value in address_values.findall('value'):
    for attr in value.attrib:
        print(f'{attr}: {value.attrib[attr]}')
  • `root.find('ADDRESS_value')` は、XML内の `<ADDRESS_value>` タグを探し出します。

  • `<ADDRESS_value>` タグ内の各 `<value>` タグに対して、ループを使用して、それぞれのタグの属性と値を取得します。`value.attrib` はタグの属性を辞書型で保持しており、そのキーと値を出力します。

結論

このスクリプトは、指定された郵便番号に対応する住所情報をAPIから取得し、その内容を簡単にアクセスできる形で表示することを目的としています。このようなスクリプトは、APIを通じて特定のデータを効率的に収集し、必要な情報を抽出するための自動化ツールとして役立ちます。




この記事が気に入ったらサポートをしてみませんか?