茨城県つくば市でモバイルアプリ(iPhone、Android)のプログラミングをする日記です。あとWordPress、Raspberry Pi、Arduinoなど。

モバイルプログラミング@つくば

Yahooファイナンスをスクレイピングして株価を抽出する

投稿日:2016年1月6日 更新日:

本記事では、Python 2.7を使っています。
執筆から時間が経っており、情報が古い可能性があります。

こんにちは、okuzawatsです。
アルゴリズムを作ってトレーディングして一攫千金、と思っていた時期が僕にもありました。

さて、Pythonで「Yahoo!ファイナンス」ウェブサイトをスクレイピングして株価を抽出してみます。
スクレイピングの対象は、日経平均株価にします。

Yahoo!ファイナンス

yahoo-stock-price

上図の黄色い丸で囲んだ場所から、日経平均株価の値を抽出してみます。

今回も、以下のツールを使ってスクレイピングを行います。

  • Python(2.7.5)
  • Beautiful Soup(4.4.0)

Beautiful Soupの詳しい使い方については、公式ドキュメントを参照してください。

Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

さて、日経平均株価のページのソースコードを見ると、以下のようなテーブルの中に株価が記載されていることがわかります。

どうやら<td class="stoksPrice">というタグに囲まれた値を抽出すれば良さそうです。
この値を抽出するには、一見、Beautiful Soupのfindメソッドを使ってfind("td",class_="stoksPrice")とすれば良さそうです。
しかし、これだと1個目の<td class="stoksPrice realTimChange">という部分を取得してしまいます。

検索条件を工夫してさらに絞り込みを行っても良いですが...。
ソースコードを良く読んでみると、<td class="stoksPrice realTimChange">タグには中身がありません。
Pythonのコードで、中身が無ければ読み飛ばす処理を入れれば目的の株価だけを取得できそうです。

Beautiful Soupのfind_allメソッドを使います。

URIを指定する部分を2行に分けているのは、codeの値を書き換えて他の株価の値を抽出できるようにしているためです。

また、抽出した株価を利用する場合のことを考えてfloat型で持っておきたいので、ゴチャゴチャと処理をしてfloat型で持てるようにしています。
Beautiful Soupで抽出した値はそのままでは処理できないっぽい、桁区切りのカンマが邪魔である、という理由からstr型にキャストしたりカンマを削除したりした後、isdigitメソッドを使ってfloat値かどうかの判定を行った上で、float型として保持させています。
面倒くさいですね。

Pythonで文字列がfloat型で保持できるやつかどうかを判定するためには、正規表現を使って判定するのが厳密っぽいです。
今回はわりと適当な方法でfloat型の判定を行っています。

参考:

isdigit()について - 主にプログラムを勉強するブログ

昨日のエントリの補足+α - 主にプログラムを勉強するブログ

関係ないですが、コードの末尾についている.oとか.tとかの拡張子みたいな記号は何でしょうか?
これが無ければ話はもっと簡単になるんですが…。
気が向いたら後で調べてみたいと思います

※調べました

20行ほどのコードでYahooファイナンスから株価を取得することができました。
あんまりアクセスしすぎると怒られるかもしれないので、もしこのスクリプトを試す方は常識の範囲内&自己責任でどうぞ。

Yahooファイナンスの拡張子の意味

この記事を公開した後、「Yahooファイナンスの拡張子は取引市場を表している」ということを教えていただきました。

検索してもなかなかそれらしい情報が出てきませんでしたが、Yahooファイナンスのヘルプに少しだけ書いてありました。

Yahoo!ファイナンスヘルプ - 株価の検索方法

市場 拡張子 正式名称
東証 .t 東京証券取引所
(マザーズ、JASDAQ、外国株市場を含む)
名証 .n 名古屋証券取引所(セントレックスを含む)
札証 .s 札幌証券取引所(アンビシャスを含む)
福証 .f 福岡証券取引所(Q-Boardを含む)

複数の市場に上場している銘柄を検索した場合は、代表市場の価格が表示されます。
複数の市場に上場している銘柄で、代表市場以外の市場での株価を表示したい場合は、その市場を特定する拡張子を証券コードの末尾につけてください。

Yahooファイナンスをスクレイピングして株価を抽出するスクリプト on GitHub

Yahooファイナンスをスクレイピングして株価を抽出するスクリプトの最新版は、GitHub上で公開しています。
このコードを使っていただいたら、ついでにGitHubのフォロー、スターをしていただけると励みになります!

Yahooファイナンスをスクレイピングして株価を抽出するスクリプト on GitHub

あわせて読みたい本

-Python

Copyright© モバイルプログラミング@つくば , 2017 AllRights Reserved Powered by AFFINGER4.