酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

C#でHtml Agility Packを使ってYahoo!ファイナンスの現在の株価を取得する

Html Agility Packという.NET Framework向けに書かれたHTMLパーサーライブラリがあります。このライブラリはC#から利用することができ、簡単にウェブスクレイピングすることができます。

株価を調べる際に「Yahoo!ファイナンスは20分遅れの株価を表示しているので、株価を見たいなら証券会社のサイトを開く」という習慣がついてしまったのですが、先日たまたまTwitterで株価に関する話題が出たので調べると株価がリアルタイム表示されていました。@bird982000さんによると今年4月に株価のリアルタイム表示についての規制(?)が緩和されていたようです。

…ということで、Yahoo!ファイナンスからコクヨ(7984.T)の株価を取得してみましょう。

もちろんタイトルの通りHtml Agility Packを使用します。今回はXPathを使っているので、前回のようにHTML全体からtitleタグを探して~ということをやらなくて済みます。

// 株価を取得したいサイトのURL
var code = "7984.T";
var urlstring = string.Format("http://stocks.finance.yahoo.co.jp/stocks/detail/?code={0}", code);

// 指定したサイトのHTMLをストリームで取得する
var doc = new HtmlAgilityPack.HtmlDocument();
using (var client = new HttpClient())
using (var stream = await client.GetStreamAsync(new Uri(urlstring)))
{
    // HtmlAgilityPack.HtmlDocumentオブジェクトにHTMLを読み込ませる
    doc.Load(stream, Encoding.UTF8);
}

// XPathを指定し株価部分を取得する
var priceNode = doc.DocumentNode.SelectSingleNode("//*[@id=\"main\"]/div[3]/div[1]/div[2]/table/tr/td[2]");

// 取得した株価がstring型なのでint型にパースする
var price = int.Parse(priceNode.InnerText);

Debug.WriteLine("コクヨ(7984.T)の株価: {0}円", price);

上記のサンプルコードを実行すると、Yahoo!ファイナンスから現在の株価が取得できます。codeの部分を変えると他の企業の株価を取得することが可能です。

関連記事

このブログでHtml Agility Packについて取り扱った記事をピックアップしました。