こんにちはbudouです!
今回はPythonを使ったスクレイピングに関して書いていきたいと思います。
スクレイピングに関しては以前にも何パターンか書いたことがありますが、今回は「法人番号のリスト」から「社名・所在地・業種」を取得したいと思います。
はじめに
実話ですが、下記のようなやり取りがありました。
クライアント)「取引先6000社を業種ごとに分類してデータを見たいよー」
私)「はーい」
... データを見てみたあと
私)え、業種の情報ないぢゃん!人手だけでやるには...1日で終わらないぞこれ...
みたいな事がありスクレイピングして情報を取ってくることに。
そんな時に書いたのが本記事のコードになります。
こちらの「中小機構」のサイトから情報の取得が出来るようになってます。
本記事で使用しているスクレイピングの要素まとめ
この記事では下記のスクレイピング要素を使用してます。 ・ボタンクリック ・入力ボックスに書き出し ・検索実行 ・検索結果
スクレイピング設計
サイトに降り立つ
「法人番号」をクリック
法人番号をインプットボックスに入力して検索
検索結果から必要な情報を抜き出す
インプットボックスの法人番号をクリア
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_)
おわりに
スクレイピングコードの一例としての紹介でした。 スクレイピングの事例として他にも記事を書いてますので、困ったことなどあれば見てみてください。
以上、よろしくお願いします。