SBI証券で対応している米国株式取扱銘柄一覧取得 python

当然SBI証券のページ構成が変わったら使えなくなります。

import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html"
response = requests.get(url)
response.encoding = response.apparent_encoding  #エンコーディング指定。これないと日本語文字列が文字化けする
soup = BeautifulSoup(response.text, "html.parser")

# テーブルから必要な列(ティッカー)を抽出
stock_tickers = []
etf_tickers = []
adr_tickers = []

with open("tickers.csv", "w", newline="") as csvfile:
    writer = csv.writer(csvfile)

    tables = soup.find_all("table", class_="md-l-table-01")

    #普通株式 収集
    table = tables[0]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        stock_tickers += df['ティッカー'].tolist()

    #ETF 収集
    table = tables[1]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        etf_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in stock_tickers:
        writer.writerow([ticker, "stock"])

    for ticker in etf_tickers:
        writer.writerow([ticker, "etf"])

    #ADR 収集
    tables = soup.find_all("table", summary="layout" )

    for table in tables:
        df = pd.read_html(str(table))[0]
        if 'ティッカー' in df.columns:  # ティッカー列がある場合
            adr_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in adr_tickers:
        writer.writerow([ticker, "adr"])