【ハウツー】
前ページのサンプルのコードは以下の通りです。Visual Studioのプロジェクトでは「HtmlAgilityPack.dll」に参照設定を行っておきます。
WEBサイトにアクセスして情報を抽出するコード(C#)
using HtmlAgilityPack;
(中略)
private void button1_Click(object sender, EventArgs e)
{
//(1)Webサイトに接続してHTMLを取得
const string url = "http://journal.mycom.co.jp/enterprise/";
System.Net.WebClient web = new System.Net.WebClient();
string html = web.DownloadString(url);
//(2)HtmlDocumentクラスにHTMLをセット
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//(3)XPathを使ってランキング情報の<a>コレクションを抽出
HtmlNodeCollection nodes =
doc.DocumentNode.SelectNodes(@"//ul[@id=""todayRanking""]//a");
//(4)<a>コレクションから値を取り出し
foreach (HtmlNode node in nodes)
{
//テキストをセット
textBox1.Text += node.InnerText + "\r\n";
//リンクをセット
textBox1.Text += node.Attributes["href"].Value + "\r\n";
}
}
コードの内容について見ていきましょう。
(1)Webサイトに接続
まずWebサイトにアクセスしてHTMLをダウンロードします。ここでは、WebClientクラス(System.Net名前空間)を利用しています。HAPにはWebサイトアクセス用のHtmlWebというクラスが用意されていますが、shift_jisのような日本語文字コードを処理できなかったため本稿では利用していません(UTF-8の場合は問題なく利用できました)。
Webサイトから取得したHTMLは以下の通りです。
(2)HTMLをHtmlDocumentクラスにセット
次に、HTMLをDOMと呼ばれる構造に展開します。そのためHtmlDocumentクラス(HtmlAgilityPack名前空間)を利用します。LoadHtmlメソッドを呼び出すとHTMLがDOMツリーに展開されます。これによってDocumentNodeプロパティからHTMLのルート要素にアクセスできるようになります。
なお、System.Windows.Forms名前空間にもHtmlDocumentクラスが存在しますので、Windowsフォームで使用する時はご注意ください。
(3)XPathを使って今日のランキング情報を抽出
次に、SelectNodesメソッドを使ってHTMLから必要な部分を抽出します。ここではXPathを「SelectNodes(@"//ul[@id=""todayRanking""]//a")」と指定して「todayRankingというid属性を持つul配下の全aノード」を取得しています。この結果、HtmlNode(HTMLノードを表すクラス)が複数格納されたHtmlNodeCollectionを取得できます。
(4)テキストボックスに文字列とリンクを設定
最後に表示する値を取得します。HtmlNodeCollectionクラスに<a>ノードのコレクションが格納されているため、InnerTextプロパティでタグ間の文字列を取得し、Attributes["href"].Valueプロパティでhref属性のURLを取得しています。
なお、今回はXPathの指定だけで必要なノードを絞り込めましたが、複雑な条件の場合には「nodes.Where(n => n.Attributes["href"].Value.Contains("絞り込み文字"))」のように、コレクションに対してフィルタリングを行うと良いでしょう。
ここではHtml Agility Packについて紹介しました。HAPはデータを抽出するだけではなく、HTMLをXMLとして保存したり、XSLTと組み合わせて別の形式(RSSフィード等)で出力したりできます。またIronPythonからツール的に利用したり、ASP.NETでマッシュアップしたりもできます。もし、HAPに興味をもたれた方は、一度ダウンロードしてみてはいかがでしょうか。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
AKB48指原莉乃がアシカとコラボ!「センターになりたいです…とか言えたら」 [11:30 5/27] エンタメ |
|
【女性編】もし自分がルパンになったら盗んでみたい物ランキング [11:00 5/27] ホビー |
|
【男性編】もし自分がルパンになったら盗んでみたい物ランキング [11:00 5/27] ホビー |
|
香里奈、"幸せを呼ぶ女"説に「みなさんもきっと幸せになれる!」 [11:00 5/27] エンタメ |
|
立川のフードフェア「まんパク」でゲコ太どらやき・ゲコ太瓦せんべいを販売 [10:54 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。