C#-Html敏捷包-can';t从网上阅读

本文关键字:-can C#-Html | 更新日期: 2023-09-27 18:29:54

我正试图制作一个小程序来读取维基百科页面上的内容,为了获得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);

有人看到问题了吗?

C#-Html敏捷包-can';t从网上阅读

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个项目。

您需要自己执行下载。

例如,可以使用System.Net命名空间中的WebClient类:

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#5 async操作中使用它们。