4
3

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で年初来安値一覧から利回りの高い株の銘柄を抽出する(Webスクレイピング)

Posted at

概要

pythonの練習がてらWebスクレイピングを用いて株の銘柄を検索して表示する機能を作りました。

背景

2024年から新NISAとなり、個別株含めて投資熱が高まってきました。

しかし、日々仕事しながら株価見るのはしんどい、、、できれば買ったら放置したい、、、

ということで以下のターゲットを絞って株の銘柄を検索してみることにします。

  • 株価が安くなっている
  • 利回りが高い

上記2点を満たす銘柄として、年初来安値一覧の中から、利回り4%以上の銘柄を表示する機能を作ります。

実装

まずは必要なライブラリをインポートします

import requests
from bs4 import BeautifulSoup

受け取ったURLから年初来安値一覧のテーブルを取得し、必要な情報を抽出して表示するメソッドを作成します。
今回はかぶたんの年初来安値一覧から抽出する前提で作成しています。

def main(url):
    stocks = []
    # ページをリクエスト
    response = requests.get(url)
    response.encoding = 'utf-8'

    # BeautifulSoupでHTMLをパース
    soup = BeautifulSoup(response.text, 'html.parser')

    # 年初来安値一覧のテーブルを見つける
    table = soup.find('table', {'class': 'stock_table'})

    # テーブルから銘柄情報を取得
    for row in table.find_all('tr')[1:]:  # ヘッダー行をスキップ
        columns = row.find_all((["td", "th"]))
        if columns and len(columns) > 5:  # 必要なカラムが存在するか確認
            code = columns[0].text.strip()
            name = columns[1].text.strip()
            price = columns[5].text.strip().replace(',', '')
            yield_percent = columns[12].text.strip().replace('%', '')
            try:
                yield_percent = float(yield_percent)
                if yield_percent >= 4.0:  # 利回りが4%以上の銘柄をフィルタリング
                    stocks.append({
                        'コード': code,
                        '銘柄名': name,
                        '株価': price,
                        '利回り': yield_percent
                    })
            except ValueError:
                continue  # 利回りが数値でない場合はスキップ

    # 結果を表示
    for stock in stocks:
        print(f"コード: {stock['コード']}, 銘柄名: {stock['銘柄名']}, 株価: {stock['株価']}, 利回り: {stock['利回り']}%")

最後に、urlを指定してメソッドを呼び出します。
テーブルのページングを考慮してURLクエリのページ番号をループしています。
余裕をもって20と実装していますが、「レスポンスが404になるまでループする」というような実装だともっと無駄がないと思います。

# かぶたんの年初来安値一覧ページのURLを指定
page_number = 0
for i in range (20):
    page_number = page_number + 1
    url = 'https://kabutan.jp/warning/?mode=3_4&market=0&capitalization=-1&stc=&stm=0&page=' + str(page_number)
    main(url)

実行結果

コード: 2107, 銘柄名: 東洋糖, 株価: 1699, 利回り: 4.12%
コード: 2499, 銘柄名: 日本和装, 株価: 320, 利回り: 4.06%
コード: 2993, 銘柄名: 長栄, 株価: 2075, 利回り: 4.34%
コード: 3245, 銘柄名: ディアライフ, 株価: 862, 利回り: 5.34%
コード: 3475, 銘柄名: グッドコムA, 株価: 646, 利回り: 5.57%
コード: 4516, 銘柄名: 日本新薬, 株価: 2874.0, 利回り: 4.31%
コード: 6089, 銘柄名: ウィルG, 株価: 951, 利回り: 4.63%
コード: 6369, 銘柄名: トヨカネツ, 株価: 3860, 利回り: 4.22%
コード: 6539, 銘柄名: MSジャパン, 株価: 1013, 利回り: 5.53%
コード: 7059, 銘柄名: コプロHD, 株価: 1454, 利回り: 4.13%
コード: 7278, 銘柄名: エクセディ, 株価: 2588, 利回り: 4.64%
コード: 7791, 銘柄名: ドリムベッド, 株価: 744, 利回り: 4.3%
コード: 7879, 銘柄名: ノダ, 株価: 1091, 利回り: 4.12%
コード: 7944, 銘柄名: ローランド, 株価: 3970, 利回り: 4.28%
コード: 7995, 銘柄名: バルカー, 株価: 3715, 利回り: 4.04%
コード: 8996, 銘柄名: フリーダム, 株価: 773, 利回り: 5.17%
コード: 9268, 銘柄名: オプティマス, 株価: 588, 利回り: 4.08%
コード: 9446, 銘柄名: サカイHD, 株価: 499, 利回り: 4.01%

表示できた。

最後に

Pythonを書くのはほぼ初めてだったため、ChatGPTの力を借りながらとりあえず完成させました。

改善点等はあるかと思いますが、まずは色々作って学習していきたいです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?