株の銘柄情報をpythonで取得する方法

この記事は約5分で読めます。

株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing))という本を購入して、スクレイピングを勉強していたのですが、

実際にスクレイピングする「株探」のサイトのHTMLが新しくなっているのか、本に載っているコードでは実行できませんでした。

そこで、自分なりにスクレイピング可能なコードを作成しました。

pyqueryの使い方

pip install pyquery

pyqueryをインストールします。

株探のサイトのURLを確認すると、

https://kabutan.jp/stock/?code=7203

これは、トヨタ自動車のページですが、URLもcode番号で割り当てられているのがわかります。(トヨタの銘柄コードは7203)

ですので、URLを次のように読み込みます。

def get_brand(code):
    url='https://kabutan.jp/stock/?code={}'.format(code)
    q=PyQuery(url)

このように関数を定義して、

get_brand(7203)

とすると、トヨタ自動車のページを読み込むことができます。

銘柄情報をpythonで取得するコード

ここでは株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing)の本で紹介されているように、

(銘柄コード、銘柄名、銘柄名の略称、上場市場、セクタ、単元株数)

を取得していきます。

#銘柄名
name = q.find('div.company_block >h3')[0].text
#上場市場
market=q.find('span.market').text()
#銘柄名の略称
short_name = q.find('.si_i1_1').remove('span').remove('time').text()
#セクタ
sector=q.find('#stockinfo_i2 a')[0].text
#単元株数
unit_str=q.find('#stockinfo_i2 :eq(2) >dd').text()
unit=int(unit_str.replace('株','').replace(',',''))
        
return code,name,short_name,market,unit,sector

このように取得することができました。

トヨタ自動車の銘柄情報を取得する

全銘柄を取得するコード

まずはコードです

from pyquery import PyQuery
import time
import sqlite3

def get_brand(code):
    url='https://kabutan.jp/stock/?code={}'.format(code)
    q=PyQuery(url)
    
    if len(q.find('span.market'))==0:
        return None
    
    try:
        name = q.find('div.company_block >h3')[0].text
        market=q.find('span.market').text()
        short_name = q.find('.si_i1_1').remove('span').remove('time').text()
        sector=q.find('#stockinfo_i2 a')[0].text
        unit_str=q.find('#stockinfo_i2 :eq(2) >dd').text()
        unit=int(unit_str.replace('株','').replace(',',''))
        
        return code,name,short_name,market,unit,sector
    
    except ValueError:
        return None

def brands_generator(code_range):
    for code in code_range:
        brand=get_brand(code)
        if brand:
            yield brand 
        time.sleep(1)
注意!!

「def brands_generator」関数内で、time.sleep(1)としなければ、株探のサーバーに大きな負荷をかけてしまいます!!

n=brands_generator(range(1301,1400))
for i in range(60):
    print(next(n))

を実行することで、1301〜1400番の銘柄情報を取得することができました。

1301から1400までの銘柄情報を取得する

僕が参考にさせてもらっている株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing))の本では、
さらに、この銘柄情報をSQLiteのファイル内に保存し、扱いやすくしています。

電子書籍で手に入るので、よかったらぜひ。

コメント

タイトルとURLをコピーしました