web-dev-qa-db-ja.com

HtmlAgilityPackおよびHtmlDecode

私は現在、コンソールアプリケーションでHtmlAgilityPackを使用して、Webサイトをスクレイピングしています。 HTMLはエンコードされているので('などのエンコードされた文字を返します)、コンテンツをデータベースに保存する前にデコードする必要があります。

HttpUtility.HtmlDecodeを使用せずにHtmlAgilityPackを使用して返されたhtmlをデコードする方法はありますか?可能であれば、コンソールアプリケーションにSystem.Webを追加しないようにします。

56
Thomas

Html Agility Packには、HtmlEntityと呼ばれるユーティリティクラスが装備されています。次のシグネチャを持つ静的メソッドがあります。

/// <summary>
/// Replace known entities by characters.
/// </summary>
/// <param name="text">The source text.</param>
/// <returns>The result text.</returns>
public static string DeEntitize(string text)

よく知られているエンティティ(&nbsp;など)および&#039;などのエンコードされた文字もサポートしています。

95
Simon Mourier

2セントを追加するだけです。StopWatchクラスを使用していくつかのパフォーマンステストを実行したところ、HttpUtility.HtmlDecodeDeEntitizeメソッドよりも15〜20%速いであることがわかりました。また、DeEntitizeにはいくつかのバグがあります(上記のコメントを参照)。

つまり、おそらくSystem.Webを参照することは、それほど悪いことではありません。

「.NETフル」(軽量バージョンである「.NETクライアントプロファイル」ではなく)をすでに対象にしているアプリを作成している場合、私はSystem.Webを参照するつもりです。

11
Serge Shultz

特別な参照を必要としない WebUtility を使用します。

1
wezten