イクメンデータアナリストのブログ

コンサルのこと/Pythonのこと/Tableauのこと などを備忘録的に書いていこうと思います。

【Pythonでスクレイピング】法人検索サイトから法人情報を取得

こんにちはbudouです!

今回はPythonを使ったスクレイピングに関して書いていきたいと思います。

f:id:budounomizu:20201227091843g:plain
やりたいこと

スクレイピングに関しては以前にも何パターンか書いたことがありますが、今回は「法人番号のリスト」から「社名・所在地・業種」を取得したいと思います。

はじめに

実話ですが、下記のようなやり取りがありました。

クライアント)「取引先6000社を業種ごとに分類してデータを見たいよー」
私)「はーい」
... データを見てみたあと
私)え、業種の情報ないぢゃん!人手だけでやるには...1日で終わらないぞこれ...

みたいな事がありスクレイピングして情報を取ってくることに。

そんな時に書いたのが本記事のコードになります。

tdb.smrj.go.jp

こちらの「中小機構」のサイトから情報の取得が出来るようになってます。

本記事で使用しているスクレイピングの要素まとめ

この記事では下記のスクレイピング要素を使用してます。 ・ボタンクリック ・入力ボックスに書き出し ・検索実行 ・検索結果

スクレイピング設計

  1. サイトに降り立つ

  2. 「法人番号」をクリック

  3. 法人番号をインプットボックスに入力して検索

  4. 検索結果から必要な情報を抜き出す

  5. インプットボックスの法人番号をクリア

  6. 3.→5.を繰り返す。

Pythonコード

input : 法人番号のリスト
output : pandas.DataFrame(法人番号、商号、所在地、業種)

import time
from selenium import webdriver
import pandas as pd

list_ = []
driver = webdriver.Chrome()

"""1.サイトに降り立つ"""
driver.get('https://tdb.smrj.go.jp/corpinfo/corporate/search#o')

"""2.「法人番号」をクリック"""
path1 = "//dl[@class='corp-search-method']/dd/label[@for='searchMethodNum_id']"
driver.find_element_by_xpath(path1).click()

list_hojin_no = ["1010401089234","1180301018771"] #法人番号のリストを用意する。ここの例では[Google, トヨタ自動車]の法人番号

"""3.→5.を繰り返す。"""
for hojin_no in list_hojin_no: # 法人番号ごとに下記を繰り返す
    print(hojin_no)
    """3.法人番号をインプットボックスに入力して検索"""
    path2 = "//input[@id='corporateNumber_id']" 
    search_box = driver.find_element_by_xpath(path2) #法人番号入力ボックスを指定
    time.sleep(0.5) #0.5秒待つ
    search_box.send_keys(hojin_no) #法人番号を入力
    search_box.submit() #検索実行

    """4.検索結果から必要な情報を抜き出す"""
    path3 = "//table[@id='resultTbl_id']/tbody/tr[2]"
    search_text = driver.find_element_by_xpath(path3).text #検索結果のテキストを取得
    search_words = search_text.split(" ") #結果を半角スペースごとに切り取り...
    dic = {} #下記で辞書に突っ込んでいく
    dic["法人番号"] = search_words[0] 
    dic["商号"] = search_words[1]
    dic["所在地"] = search_words[2]
    dic["業種"] = search_words[3]
    time.sleep(0.5)
    list_.append(dic) #辞書型に整形したものをリスト化

    """5.インプットボックスの法人番号をクリア"""
    path4 = '//*[@id="clear_id"]'
    clear_bottn = driver.find_element_by_xpath(path4).click() #次の入力をするために法人番号入力ボックスをクリアしておく

df = pd.DataFrame(list_)

おわりに

スクレイピングコードの一例としての紹介でした。 スクレイピングの事例として他にも記事を書いてますので、困ったことなどあれば見てみてください。

www.budounomizu.work

www.budounomizu.work

www.budounomizu.work

以上、よろしくお願いします。