2014/03/24

.NET の HTML パーサーは Html Agility Pack で決まりでしょ?


プログラムを書いていると、時に Web サイトのデータを引っ張ってきて解析したり、加工したりしたい場合が出てきます。そんな時に必要なのが HTML パーサーです。

.NET (C#, VB.NET etc)には標準で HTML パーサーが組み込まれていないので、探してみたら以前は見つからなかったすばらしい HTML パーサーが出ているじゃありませんか。

その HTML パーサーは、Html Agility Pack というものです。

Html Agility Pack

Html Agility Pack のすばらしいところはいくつもあるのですが、その1つがインストールの容易さです。

Visual Studio には、パッケージ管理マネージャーとして NuGet (ぬげっと) という仕組みがあるのですが、Html Agility Pack は NuGet で簡単にインストールすることができます。

NuGet を見たことがない方のために、スナップショットを貼っておきます。

pic01

この画面で検索してインストールボタンをクリックするだけで、現在のプロジェクトの .NET Framework のバージョンに適したライブラリをインストールしてくれ、すぐに使えるように設定までしてくれます。アンインストールも簡単にできます。

NuGet からインストールできるということは、簡単にインストールできるという以外にも、ある程度メジャーなライブラリであるということでもあります。なので、どこかで見つけてきたオープンソースのライブラリより安心して使うことができます。

また、使い勝手もよく、XMLDocument を扱うように HTML ドキュメントを操作することができます。DOM (Document Object Model) が理解できていれば最初のきっかけさえあれば後はドキュメントなしでも使えるくらいです。

以下は、公式サイトに掲載されているサンプルコードですが、本当に XMLDocument を扱っているようですね。

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
   HtmlAttribute att = link["href"];
   att.Value = FixLink(att);
}
doc.Save("file.htm");

上記の例では、XPath も使えてます。さらにすごいのが、Linq to Object に対応しているという点です。Linq to XML ライクな文法で Linq を使用することができます。

以下は、Linq to Object で href 属性を取得する実際のアプリケーションのコードです。href 属性を拡張メソッドで取得しています。

foreach (HtmlNode detail in html.DocumentNode.SelectNodes("//a[@class=\"readAll\"]"))
{
    string href = string.Empty;

    var q = detail.Attributes.Where(a => a.Name == "href");

    foreach (var item in q)
    {
        href = item.Value;
    }
    this.LabelNewsDetail.Tag = href;
}

さらに、Html Agility Pack  は非常に使いやすいオープンソースライセンスを採用しています。

そのライセンスは、Microsoft Public License (Ms-PL) というものです。あまり聞きなれないライセンスですが、以下のようなライセンスになります。

このライセンスでは、被許諾者にはこういった権限と制約があります。

  • 著作権および特許権の使用料は両方とも無料
  • ソース コードを商用または非商用の目的で表示、変更、および再頒布できます。
  • ソース コードを変更したり、他のユーザーに開示することができます。
  • 利用する場合は、著作権、特許権、商標、出所を表示をアプリ内のどこかに入れておく必要があります。

http://blogs.msdn.com/b/shintak/archive/2012/09/09/10347542.aspx

ほぼ、MIT ライセンスくらいゆるいライセンスで、ライセンスも使い勝手がよいです。

ですので、.NET の HTML パーサーは Html Agility Pack で決まりといっても過言ではないのではないでしょうか。

.NET の HTML パーサーをお探しの方は、試してみてはいかがでしょうか。


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから