LoginSignup
6
10

More than 1 year has passed since last update.

gBizINFOから法人情報APIを取得してみる

Last updated at Posted at 2021-07-06

概要

  • 何がしたいか:複数の法人の情報(事業概要、資本金、従業員数、企業HP etc. )を機械的に入手したい
    • 使い道:企業情報のリサーチ、特許調査、財務分析 etc.
  • どうやるか:gBizINFOというサイトで、法人情報のAPIが公開されているらしい。

gBizINFOとは

法人として登記されている約400万社を対象とし、法人番号、法人名、本社所在地に加えて、府省との契約情報、表彰情報等の政府が保有し公開している法人活動情報を本サイトで一括検索、閲覧できます。

https://info.gbiz.go.jp/about/index.html

得られる法人情報の詳細

https://info.gbiz.go.jp/hojin/common/data/resourceinfo.pdf;jsessionid=92A8F321A874042AF918672302B62479

  • 法人基本情報
    • 法人代表者名、資本金、従業員数(全体/男性/女性)、営業品目(業種)、事業概要、企業HP、設立年 etc.
  • 届出認定 / 表彰 / 補助金 / 調達 / 特許 / 財務 / 職場 情報

→今回は法人基本情報を取得した。

APIの種類

→今回はREST APIを取得することにした。

環境

開発環境

下記の素人3点セット。

  • Windows10
  • Python3.6.3 (Anaconda)
  • jupyter notebook

インストールが必要なモジュール

requestsモジュール
https://qiita.com/hththt/items/14bfc2bf23192b020371

(必要あれば)tqdmモジュール
https://knknkn.hatenablog.com/entry/2020/05/24/095438

法人情報を取得してみる

法人番号のリストを作成

法人番号を知っていた法人を適当にリスト化(input.xlsx)。

法人番号 法人名
9010401014127 株式会社ジャニーズ事務所
9011001029597 東日本旅客鉄道株式会社
1010601016863 ライオン株式会社
3120001077469 株式会社竹中工務店
5010701000940 いすゞ自動車株式会社
3120001136159 サントリーホールディングス株式会社
6010005007397 国立大学法人東京医科歯科大学
9011001029597 東日本旅客鉄道株式会社
1020001071491 富士通株式会社

gBizINFOへのAPIアクセストークンを取得

情報提供REST APIの利用にあたっては、利用申請により発行されたアクセストークンの設定が必要です。

とのこと(https://info.gbiz.go.jp/api/index.html )なので、利用申請してトークンを取得。

モジュールのインポート

get_gbizinfo_api.ipynb
import json
import pandas as pd
import requests
import numpy as np
from tqdm.autonotebook import tqdm #notebookで使うときのtqdm
#from tqdm import tqdm #スクリプト化したときのtqdm

設定が必要な情報

get_gbizinfo_api.ipynb
raw_data_file_name = 'input.xlsx' #法人番号リストファイル名(Excel)
token = '********************' #APIにアクセスするためのトークン
columns = ['name','capital_stock','employee_number','business_summary','company_url'] #ほしい法人基本情報
           #法人名、資本金、従業員数、事業概要、企業HP
output_file_name = 'output.xlsx'#法人情報を紐づけた出力ファイル名(Excel)

元データのクレンジング

get_gbizinfo_api.ipynb
raw_data = pd.read_excel(raw_data_file_name,encoding='cp932') #元データの読み込み
corp_num_series = raw_data['法人番号'].fillna(-1).astype(np.int64) #法人番号の列のみ抽出、int型に変換(法人番号がnullの場合は-1で補完し、行を維持しつつ実質的にAPIが返ってこないようにする)

法人基本情報APIを取得し、元データに紐づけるプログラム

get_gbizinfo_api.ipynb
class CorporateInformation:
    def __init__(self,token):
        self.headers = {
            "Accept": "application/json",
            "X-hojinInfo-api-token": token #APIにアクセスするためのトークン
        }
        self.endpoint_url = 'https://info.gbiz.go.jp/api/v1/hojin/' #法人情報提供のエンドポイント

    def _get_corporate_information(self,corp_num_series): #法人番号をキーに、法人基本情報を取得し出力

        results = [] #複数法人の法人基本情報(辞書型)を格納するリスト(df型だと処理時間かかるためリストで対応)
        for corp_num in tqdm(corp_num_series): #法人番号ごとに、法人基本情報を取得、格納

            try: #法人番号が入力されている/apiにtimeout秒以内にアクセスできる
                res = requests.get(
                    url = self.endpoint_url+str(corp_num), #https://info.gbiz.go.jp/api/v1/hojin/{corporateNumber}
                    headers = self.headers, # {"Accept", "X-hojinInfo-api-token"}
                    timeout = 10
                )
                corp_info = res.json()['hojin-infos'][0] #法人基本情報のdictを取得
                results.append(corp_info)
            except: #法人番号を入力されていない/apiにtimeout秒以内にアクセスできない
                results.append({}) #法人番号が欠損している企業のレコードとして、空のリストを追加する

        df = pd.DataFrame.from_dict(results) #法人名をインデックスに法人基本情報をdf化
        return df

    def _merge(self,raw_data,df_corp_info,columns): #必要な法人基本情報だけ抜き出して、元データに紐づけ
        return pd.concat([raw_data,df_corp_info[columns]],axis=1)

APIの取得、元データへ紐づけ、出力

get_gbizinfo_api.ipynb
corp_info = CorporateInformation(token=token) #法人情報取得のためのインスタンス作成

df_corp_info = corp_info._get_corporate_information(corp_num_series) #法人基本情報apiを取得(df形式)

df_output = corp_info._merge(raw_data,df_corp_info,columns) #元データに必要な法人基本情報をマージ

df_output.to_excel(output_file_name) #excel形式で出力

出力結果

output.png

  • C~H列がAPI取得したデータ。
  • G列の"business_summary"の情報は法人によって濃淡あり。
  • 大企業でも必ずしもデータが入っているわけではない。
  • データの時点は下記とのこと。 https://info.gbiz.go.jp/faq/index.html

原則としてgBizINFOが運用開始した平成28年1月以降に収集したデータとなります。また日付情報については、契約情報の契約日や届出・認定の認定日など①「各情報に由来する起点日」と②「gBizINFOへの登録日」の2種類となります。
①については「認定日」「契約日」など画面各項目に日付データを掲載しており、これらは各府省庁から提供される情報に起因します。
➁については、法人番号公表サイト、全省庁統一資格、しょくばらぼ、EDINETの4サイトからのデータ取得分は、APIにて日次でデータ取得・更新を行っており、それらの日付データは各法人のプロフィール画面下にある出典元情報に記載しており、それ以外の登録日付データはCSVおよび各APIにて取得できます。

Future Work

特許情報の調査や財務情報の分析のための情報取得もしてみたい。

Reference

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10