0

我正在尝试制作一个小程序来从维基百科页面读取内容,并获取 html,我在 SO 的其他地方找到了这段代码

        HtmlDocument doc = new HtmlDocument();
        StringBuilder output = new StringBuilder();

        doc.LoadHtml("http://en.wikipedia.org/wiki/The Metamorphosis of Prime Intellect");
        var text = doc.DocumentNode.SelectNodes("//body//text()").Select(node => node.InnerText);

        foreach (string line in text)
            output.AppendLine(line);

        string textOnly = HttpUtility.HtmlDecode(output.ToString());

        Console.WriteLine(textOnly);

但是,我收到运行时错误“ArgumentNullException 未处理”,并且突出显示了这一行:

        var text = doc.DocumentNode.SelectNodes("//body//text()").Select(node => node.InnerText);

有没有人看到问题?

4

2 回答 2

4

doc.LoadHtml采用html 字符串而不是url。要下载该页面,您可以使用HtmlAgilityPack.HtmlWeb

var web = new HtmlAgilityPack.HtmlWeb();
var doc = web.Load("http://en.wikipedia.org/wiki/The Metamorphosis of Prime Intellect");

var text = doc.DocumentNode.SelectNodes("//body//text()").Select(node => node.InnerText);
var output = String.Join("\n", text);

SelectNodes在我的测试中返回 622 个项目。

于 2013-09-02T22:05:36.173 回答
0

您需要自己执行下载。

例如,您可以使用命名空间中的WebClientSystem.Net

var pageUri = new Uri("http://en.wikipedia.org/wiki/The Metamorphosis of Prime Intellect");
var wc = new WebClient();
var html = wc.DownloadString(uri);

//Then do
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

HttpClient如果你愿意的话,还有一堂课。

它们的优势HtmlWeb在于您可以在EAP和 C# 5async操作中使用它们。

于 2013-09-02T22:03:57.403 回答