HtmlAgilityPack - 获取DIV内容

时间:2017-05-19 19:47:46

标签: c# html string html-agility-pack scrape

我试图在WinForms C#中使用HtmlAgilityPack从DIV中获取一些文本。

我的代码是:

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml("http://www.tibia.com/news/?subtopic=latestnews");
var res = doc.DocumentNode.SelectSingleNode("//div[@id='PlayersOnline']");
var content = res.InnerHtml;

// Print content
MessageBox.Show(content);

我想要的内容来自: http://www.tibia.com/news/?subtopic=latestnews

在网站的右上角有一个方框,上面写着“玩家在线”的数量。我想得到那么多。

网站上的HTML如下所示:

<div id="PlayersOnline" onclick="window.location = 'https://secure.tibia.com/community/?subtopic=worlds';">11723<br>Players Online</div>

所以我希望得到11723作为输出。如果我得到整个:11723<br>Players Online作为输出并不重要。我可以在以后进行正则表达式匹配或拆分字符串或其他东西,以忽略br标记。

但是我的代码都没有工作,我不知道为什么。应用程序崩溃并说

System.NullReferenceException: 'Object reference not set to an instance of an object.'

<res>5__8 was null.

2 个答案:

答案 0 :(得分:0)

更改此行:

    HtmlAgilityPack.WebSite webSite = new HtmlAgilityPack.WebSite();
    HtmlAgilityPack.HtmlDocument document = webSite.Load("http://www.tibia.com/news/?subtopic=latestnews");

    string content = document.GetElementbyId("PlayersOnline").OuterHtml;

答案 1 :(得分:0)

尝试使用InnerText代替InnerHtml

var content = doc.DocumentNode.SelectSingleNode("//div[@id='PlayersOnline']").InnerText;