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

如果要从 web 加载 html,则需要使用该HtmlWeb对象:

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

LoadHtml将一串实际 HTML 作为参数。您可以通过 Load a Stream fromWebResponse.GetResponseStream()代替。

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