c#-XPath表达式在HtmlAgilityPack中不起作用
作者:互联网
我知道这可能是我对XPath的不了解,但请允许我确认一下,因为我已经在Google上进行了足够的搜索.
我有一个网站,希望从中获得新闻标题:www.farsnews.com(波斯语)
在firefox下使用FireBug和FireXpath扩展,并手动提取和测试与标题匹配的多个Xpath表达式,例如:
* html/body/div[2]/div[2]/div[2]/div[*]/div[2]/a/div[2]
* .//*[@class="topnewsinfotitle "]
* .//div[@class="topnewsinfotitle "]
我还使用XPather扩展对它们进行了测试,它们似乎工作得很好,但是当我对其进行测试时……SelectNodes返回null!
有任何线索或提示吗?
这是代码的一部分:
listBox2.ResetText();
HtmlAgilityPack.HtmlWeb w = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = w.Load("http://www.farsnews.com");
HtmlAgilityPack.HtmlNodeCollection nc = doc.DocumentNode.SelectNodes(".//div[@class=\"topnewsinfotitle \"]");
listBox2.Items.Add(nc.Count+" Items selected!");
foreach (HtmlAgilityPack.HtmlNode node in nc) {
listBox2.Items.Add(node.InnerText);
}
谢谢.
解决方法:
我已经测试了你的表情.正如Dialecticus在评论中所提到的那样,您有一个结尾空间,该空格不应存在.
//div[@class='topnewsinfotitle ']/text()
返回“空序列”,请参阅评估:http://xmltools.dk/EQA-ACA6
//div[@class='topnewsinfotitle']/text()
返回标题列表,请参阅:http://xmltools.dk/EgA2APAj
但是,如果可能还有其他类,请使用以下代码(http://xmltools.dk/EwA8AJAW):
//div[contains(@class, 'topnewsinfotitle')]/text()
(我看到它们是我提供的链接中的编码问题,但是,对于含义和所有XPath表达式都无关紧要,您可以删除/ text()以获得节点,而不仅仅是文本)
但是,如果您拥有此站点,则应在头条新闻中提供XML(可能是RSS或ATOM)或JSON,它们将具有更好的性能,并且最重要的是,它更防弹.
标签:xpath,html-agility-pack,c 来源: https://codeday.me/bug/20191105/1998195.html