1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで最新の銘柄コードを取得し、楽天RSSで株式情報を自動収集する

1
Last updated at Posted at 2025-09-28

1. はじめに

2024年1月以降、銘柄コード(証券コード)には、アルファベットがつくようになりました。

銘柄コードの取得方法は、下記リンクから直接エクセルファイルをダウンロードするか

下記リンクのように、pythonで取得することもできます。

以前書いた記事では、

アルファベットを考慮していなかったので、今回は、楽天証券のマーケットスピード II RSS に、この銘柄コードをいれて、全銘柄情報を取得したいと思います。
ぜひ、情報収集に役立てていただければと思います。

マーケットスピード II RSSについては、こちらを参照ください。

マーケットスピードIIを立ち上げて、エクセルを立ち上げ「マーケットスピードII」タブで接続中となったところから、次のコードを実行して収集を始めます。

image.png

2. 楽天RSSで株式情報取得するpythonコード

pythonのコードを書いておきます。(CHAT GPT に手伝ってもらいました。へへへ。)

import win32com.client
from openpyxl import Workbook
import pandas as pd
import time
import pywintypes
import datetime

print("収集中...")

# --- 設定 ---
rss_list = [
    '銘柄コード', '銘柄名称', '現在日付', '現在値', '時価総額', '単位株数', '配当', 'PER', 'PBR',
    '信用売残', '信用売残前週比', '信用買残', '信用買残前週比', '信用倍率',
    '配当落日', '中配落日', '権利落日', '決算発表日',
    '年初来高値', '年初来安値', '上場来高値', '上場来安値'
]
cal_list = ['購入可能額', '配当利回り']
add_list = rss_list + cal_list

step_no = 500  # RSS 一度に取得する銘柄数

# --- CSV から銘柄コードリスト取得 ---
# 銘柄コードのファイルを指定します。ここでは、stock_code.csvというファイルを指定しています。
csv_path = r"C:\Users\xxx\stock_code.csv"
df_codes = pd.read_csv(csv_path, encoding="utf-8")
stock_codes = df_codes['コード'].tolist()  # 「コード」列をリスト化

# --- Excel 起動 ---
try:
    xl = win32com.client.GetObject(Class="Excel.Application")
except pywintypes.com_error:
    print("Excel が開いていません。")
    exit()
xl.Visible = True

# RSSのタイトル行を記入
for col, item in enumerate(rss_list):
    xl.Cells(1, col + 2).Value = item

# --- Excel 新規ブック作成(openpyxl側) ---
wb_new = Workbook()
if wb_new.active is None:
    ws_new = wb_new.create_sheet(title="Sheet1")
else:
    ws_new = wb_new.active

# ヘッダー行を追加
ws_new.append(add_list)

# --- Excel セル書き込み用再試行関数 ---
def retry_excel_set(cell, value, formula=False, max_retry=10):
    for i in range(max_retry):
        try:
            if formula:
                cell.Formula = value
            else:
                cell.Value = value
            return True
        except pywintypes.com_error:
            wait = 1 * (i+1)  # 1秒, 2秒, 3秒...最大10秒待つ
            print(f"セル書き込みリトライ {i+1}回目 ({wait}秒待機)")
            time.sleep(wait)
    return False

# --- RSS データ取得 ---
for i in range(0, len(stock_codes), step_no):
    batch_codes = stock_codes[i:i + step_no]
    # Excel 表クリア
    xl.Range(xl.Cells(2, 1), xl.Cells(step_no + 2, len(rss_list) + 1)).ClearContents()

    # RSS 表に銘柄コードと関数を書き込み
    for row, stock_no in enumerate(batch_codes):
        retry_excel_set(xl.Cells(row + 2, 1), str(stock_no))
        for col, item in enumerate(rss_list):
            formula = f'=RssMarket("{stock_no}","{item}")'
            retry_excel_set(xl.Cells(row + 2, col + 2), formula, formula=True)

    # RSS 表の値が更新されるまで少し待つ
    time.sleep(5)

    # Python 側でデータ取得
    batch_data = []
    for row, stock_no in enumerate(batch_codes):
        row_data = [xl.Cells(row + 2, col + 2).Value for col in range(len(rss_list))]

        # 計算列
        current_price = row_data[rss_list.index("現在値")]
        unit_share = row_data[rss_list.index("単位株数")]
        dividend = row_data[rss_list.index("配当")]

        # Excel から取得した値を安全に float に変換
        def to_float(val):
            try:
                return float(val)
            except (ValueError, TypeError):
                return 0.0

        current_price_f = to_float(current_price)
        unit_share_f = to_float(unit_share)
        dividend_f = to_float(dividend)

        purchase_amount = current_price_f * unit_share_f if current_price_f and unit_share_f else 0
        dividend_yield = (dividend_f / current_price_f * 100) if current_price_f else 0

        row_data.append(purchase_amount)
        row_data.append(dividend_yield)

        batch_data.append(row_data)

    # DataFrame(今回はフィルタなし)
    df_batch = pd.DataFrame(batch_data, columns=add_list)

    # Excel 書き込み
    for r in df_batch.values.tolist():
        ws_new.append(r)

    print(f"{min(i + step_no, len(stock_codes))}/{len(stock_codes)} 銘柄処理完了", end="\r")

# --- 保存 ---
now = datetime.datetime.now()
filename = f""C:\Users\xxx\銘柄収集_{now:%Y%m%d_%H%M}.xlsx"
wb_new.save(filename)
print("\n完了:", filename)

3. 出力

実行して、出来たファイルです。

image.png

エクセルファイルとして保存しますので、スクリーニングは、並べ替えやフィルタで行えます。

例えば、アルファベットがついている銘柄コードの中で、10万円以下で買える配当のある株を探すと次のようになりました。

image.png

1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?