株と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番の銘柄情報を取得することができました。
僕が参考にさせてもらっている株とPython─自作プログラムでお金儲けを目指す本 (技術の泉シリーズ(NextPublishing))の本では、
さらに、この銘柄情報をSQLiteのファイル内に保存し、扱いやすくしています。
電子書籍で手に入るので、よかったらぜひ。
コメント