見出し画像

【Python初心者もできるよ!】スクレイピングで上場企業のPBRを取得する方法

この記事では、
Pythonによるスクレイピングで
上場企業のPBR(株価純資産倍率)を取得する方法をご紹介します。

スクレイピングと聞くと
難しそうなイメージを持たれるかもしれませんが、
Pythonのコードは数行ですし、
GoogleColaboratoryで実装しますので、
初学者の方でも簡単に取り組めると思います。

スクレイピングにあたっては、当該サイトがスクレイピングを禁止していないか確認する必要があります。
2024年4月時点では、IR BANKがスクレイピングを禁止していないことを確認しています。(ただし、負荷をかけないように注意)

以下のサイトの実践版です。


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

決算期末のPBR推移

❷2024年3月29日のPBR

日々の株価・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以外も取得できますので
ぜひ、チャレンジしてみてください。

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