考虑这段最简单的代码:
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问题复制/启发,例如this。 编译时会出现运行时错误,指出“对象引用未设置为对象的实例”。突出了foreach线。
我无法理解,为什么环境已经变得烦躁于这段简陋,无辜和无用的代码。
我还想知道,HTMLAgilityPack是否接受HTML类作为节点?
答案 0 :(得分:4)
如果要从网站加载html,则需要使用HtmlWeb
对象:
HtmlWeb web = new HtmlWeb();
HtmlDocument doc =web.Load(url);
答案 1 :(得分:1)
LoadHtml
将一串实际的HTML作为参数。您可以改为从WebResponse.GetResponseStream()
传递加载流。
WebRequest req = WebRequest.Create( "http://www.google.com" );
Stream s = req.GetResponse().GetResponseStream();
doc.Load(s);