3

次の最も単純なコードを考えてみましょう。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;

namespace WebScraper
{
    class Program
    {
        static void Main(string[] args)
        {
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml("http://www.google.com");

            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
            {
            }
        }
    }
}

これは事実上何もせず、このような他のさまざまな StackOverflow の質問からコピー/インスピレーションを受けています。これをコンパイルすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という実行時エラーが発生します。foreach 行を強調表示します。

この謙虚で無邪気で役に立たないコードに対して、なぜ環境がいらいらするようになったのか、私には理解できません。

また、HTMLAgilityPack は HTML クラスをノードとして受け入れますか?

4

2 に答える 2

4

HtmlWebWebからhtmlをロードする場合は、オブジェクトを使用する必要があります。

HtmlWeb web = new HtmlWeb();
HtmlDocument doc =web.Load(url);
于 2010-06-05T11:40:35.417 に答える
1

LoadHtml実際の HTML の文字列を引数として取ります。代わりにLoad a Stream from を渡すことができますWebResponse.GetResponseStream()

WebRequest req = WebRequest.Create( "http://www.google.com" );
Stream s = req.GetResponse().GetResponseStream();
doc.Load(s);
于 2010-06-05T11:28:10.157 に答える