【Python初心者もできるよ!】スクレイピングで上場企業のPBRを取得する方法
この記事では、
Pythonによるスクレイピングで
上場企業のPBR(株価純資産倍率)を取得する方法をご紹介します。
スクレイピングと聞くと
難しそうなイメージを持たれるかもしれませんが、
Pythonのコードは数行ですし、
GoogleColaboratoryで実装しますので、
初学者の方でも簡単に取り組めると思います。
以下のサイトの実践版です。
IR BANKとは
企業の投資関連情報を提供するウェブサイトです。
このサイトでは、上場企業の
・財務データ
・株価動向
・配当情報
・企業のランキング
・市場動向
など幅広い情報を提供しています。
特定の企業の業績修正、決算予想、自社株買いなどの情報もリアルタイムで把握することができます。
スクレイピングのイメージ
実際に、どこからデータを取得するのか
見てみましょう。
IR BANKで
個別銘柄のPBRが表示される画面を見ると、
❶決算期末ごとのPBR
❷毎日の株価とPBR
の2つが用意されています。
今回は、
決算期が3月31日である銘柄について、
❶2022年3月31日と2023年3月31日のPBR(決算期末ベース)
❷2024年3月31日のPBR
を取得していきます。
具体的には以下の赤囲みを取得していきます。(例:JR西日本)
❶2022年3月31日・2023年3月31日のPBR
❷2024年3月29日のPBR
Pythonプログラム実装方法
get_pbrという関数を作成します。
引数に証券コードを渡して実行すると
2022年3月31日、2023年3月31日、2024年3月29日の
PBRが取得できます。
ライブラリーのインポート・関数の用意
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
def get_pbr(code):
# 対象のURL
url = f'https://irbank.net/{code}/pbr'
# requestsを使って、ウェブサイトからHTMLを取得する
response = requests.get(url)
response.raise_for_status() # ステータスコードが200でなければエラーを出す
# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(response.text, 'html.parser')
# 2022年と2023年のデータを抽出する
pbr_dates = ['2022年3月31日', '2023年3月31日']
pbr_values = {}
for date in pbr_dates:
dt_tag = soup.find('dt', text=date)
if dt_tag:
dd_tag = dt_tag.find_next_sibling('dd')
if dd_tag:
pbr_values[f"PBR_{date[:4]}"] = dd_tag.find(
'span', class_='text').text.replace("倍","")
else:
pbr_values[f"PBR_{date[:4]}"] = np.nan
else:
pbr_values[f"PBR_{date[:4]}"] = np.nan
# 2024年のデータを取得する
try:
pbr_row = soup.find('a', title='PBR - 2024/03/29').find_parent('tr')
pbr_value = pbr_row.find_all('td')[-1].text.strip()
pbr_values[f"PBR_2024"] = pbr_value
except Exception as e:
print(e)
pbr_values[f"PBR_2024"] = np.nan
# pandasのDataFrameに変換
df = pd.DataFrame([pbr_values], index=[code])
関数の実行
code = 9021
get_pbr(code)
出力結果
複数銘柄のPBRを取得するには
複数銘柄のコードをcodeというリストに格納し、
以下のfor文を回せば、複数銘柄のPBRが取得できます。
time.sleep(3)を入れて、負荷をかけないように注意しましょう
#こんな感じで、codeというリストに証券コードを格納していきます
code = [9021, 4502, 5401, 5713, 8306,]
for文で回します!
%%time
import time
from tqdm import tqdm
df1 = pd.DataFrame()
for c in tqdm(code):
df = get_pbr(c)
df1 = pd.concat([df1,df],axis=0)
time.sleep(3)
さいごに
いかがでしたでしょうか。
IR BANKは見た目もそうですが、
HTML構造もシンプルなので
初学者がスクレイピングするには最適なサイトだと思います。
上記のコードを改良すれば、
PBR以外も取得できますので
ぜひ、チャレンジしてみてください。