3

Web ページ情報の解析に HtmlAgilityPack を使用しようとしています。これは私のコードです:

using System;
using HtmlAgilityPack;

namespace htmparsing
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            string url = "https://bugs.eclipse.org";
            HtmlWeb web = new HtmlWeb();
            HtmlDocument doc = web.Load(url);
            foreach(HtmlNode node in doc){
                //do something here with "node"
            }               
        }
    }
}

しかし、にアクセスしようとすると、リストにdoc.DocumentElement.SelectNodes表示されません。DocumentElement参照に HtmlAgilityPack.dll を追加しましたが、何が問題なのかわかりません。

4

2 に答える 2

12

ASP.NET を使用して HAP (HTML Agility Pack) で DOM 要素をスクレイピングする方法を示す記事を書きました。プロセス全体を段階的に実行できます。見て、試すことができます。

ASP.NET で HtmlAgilityPack (HAP) を使用して HTML DOM 要素をスクレイピングする

あなたのプロセスについては、私にとってはうまくいっています。あなたが単一の変更で行ったように、私はこの方法を試しました。

string url = "https://www.google.com";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a")) 
{
    outputLabel.Text += node.InnerHtml;
}

期待どおりの出力が得られました。問題は、実際には DocumentNode である必要がある HtmlDocument オブジェクトから DocumentElement を要求いることです。あなたが直面している問題について、HTMLAgilityPackの開発者からの回答を次に示します。

HTMLDocument.DocumentElement がオブジェクト ブラウザにありません

于 2013-11-09T02:10:09.790 に答える
1

表示されている動作は正しいです。

実際に行っていることを見てください: http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs

いくつかの xpath に一致するノードを選択するように最上位の要素に要求しています。xpath 式が で始まらない限り、//子孫ノードである相対ノードを要求しています。ドキュメント要素は、それ自体の子孫ではありません。それ自体の子孫である要素はないからです。

于 2013-11-08T23:14:48.087 に答える