豚吐露@wiki

HtmlAgilityPack

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

HtmlAgilityPack

Windows 7 Professional
Visual Studio 2013 Professional
HtmlAgilityPack 1.4.9


HTMLに対してセレクタなどの機能を提供してくれる。


~ install ~
VisualStudioのメニューから[ツール]-[NuGet パッケージ マネージャー]-[パッケージ マネージャー コンソール]を選択し、以下を入力。
PM> Install-Package HtmlAgilityPack

GUIでやりたかったら、[ツール]-[NuGet パッケージ マネージャー]-[ソリューションの NuGet パッケージの管理]を選択。
左のリストから『オンライン』を選択し、右上の『オンライン の検索』欄へ『HtmlAgilityPack』と入力すると、真ん中の検索結果一覧に『HtmlAgilityPack』ってのが出てくるハズ。
それを選択して、『インストール』ボタンを押下するだけ。
この時、『HtmlAgilityPack』を使うpjを指定するチェックリストが出てくるので、使いたいpjにだけチェックを入れたら良い。


~ 設定 ~

色々設定があるらしい。
HtmlDocumentに『Option』で始まる設定が色々用意されてる。使いたい機能の設定を変更してからhtmlを読み込む。

OptionAddDebuggingAttributes debug用nodeに属性を追加する
OptionAutoCloseOnEnd 閉じてないタグを閉じる?
OptionCheckSyntax シンタックスチェック True/False
OptionComputeChecksum
OptionDefaultStreamEncoding
OptionExtractErrorSourceTextMaxLength
OptionExtractErrorSourceText
OptionFixNestedTags 閉じてないタグを閉じる?
OptionOutputAsXml
OptionOutputOptimizeAttributeValues
OptionOutputOriginalCase
OptionOutputUpperCase
OptionReadEncoding
OptionStopperNodeName
OptionUseIdAttribute
OptionWriteEmptyNodes

タグが正しく閉じられていなかった場合、挙動がおかしい事があったので注意。
HtmlDocumentにHTML書式のチェックのようなオプションがあったと思う。→


~ 素材の開き方 ~
  • HTMLファイルをいじる
  1. HtmlDocument html = new HtmlDocument();
  2. html.Load(htmlPath); // htmlPath: 相対or絶対pathでhtmlファイルを指定

  • HTML文字列をいじる
  1. HtmlDocument html = new HtmlDocument();
  2. html.LoadHtml(htmlStr); // htmlStr: なんらかの方法で取得したHTML文字列


~ nodeの取得方法 ~
  • 1つのnodeを取得
html.DocumentNode.SelectSingleNode(xPath);
  • 複数のnodeを取得
html.DocumentNode.SelectNodes(xPath);

※xPathには XPath 形式でnodeを指定する
SelectSingleNode 該当するタグの最初の1つだけが取得される。
SelectNodes 該当するタグがcollectionで取得される。対象が1つでもcollectionで取得される。
collectionなので、取得した後LINQやforeachを使うことができる。

以下、具体的な取得方法。


~ nodeの指定方法 ~
  • classを指定して取得
e.g.) hogeClassというclassが付いてるtableタグの内容を取得
var nodes = html.DocumentNode.SelectNodes("//table[@class='hogeClass']");

  • idを指定して取得
e.g.) hogeIdというIDが付いてるtableタグの内容を取得
var node = html.DocumentNode.SelectSingleNode("//table[@id='hogeId']");

  • タグを指定して取得
e.g.) divタグを取得
var nodes = html.DocumentNode.SelectNodes("//div");

  • 上記の条件を複合指定
e.g.) classにhogeが付いてるdivタグの下のtableタグの内容を取得
var node = html.DocumentNode.SelectSingleNode("//div[@class='hoge']/table");


~ 取ったnodeの使い方 ~
  • nodeの値
var val = node.InnerHtml;
  • nodeの任意の属性
e.g.) classの取得
var val = div.GetAttributeValue("class", "");
※第2引数は取れなかった場合に返される値。string、bool、intで指定できる。


更新日: 2014年12月22日 (月) 15時58分26秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー