私は現在、コンソールアプリケーションでHtmlAgilityPackを使用して、Webサイトをスクレイピングしています。 HTMLはエンコードされているので('
などのエンコードされた文字を返します)、コンテンツをデータベースに保存する前にデコードする必要があります。
HttpUtility.HtmlDecodeを使用せずにHtmlAgilityPackを使用して返されたhtmlをデコードする方法はありますか?可能であれば、コンソールアプリケーションにSystem.Webを追加しないようにします。
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)
よく知られているエンティティ(
など)および'
などのエンコードされた文字もサポートしています。
2セントを追加するだけです。StopWatch
クラスを使用していくつかのパフォーマンステストを実行したところ、HttpUtility.HtmlDecode
がDeEntitize
メソッドよりも15〜20%速いであることがわかりました。また、DeEntitize
にはいくつかのバグがあります(上記のコメントを参照)。
つまり、おそらくSystem.Webを参照することは、それほど悪いことではありません。
「.NETフル」(軽量バージョンである「.NETクライアントプロファイル」ではなく)をすでに対象にしているアプリを作成している場合、私はSystem.Webを参照するつもりです。
特別な参照を必要としない WebUtility を使用します。