我正在尝试使用HtmlAgilityPack来解析网页信息。这是我的代码:
using System;
using HtmlAgilityPack;
namespace htmparsing
{
class MainClass
{
public static void Main (string[] args)
{
string url = "https://bugs.eclipse.org";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
foreach(HtmlNode node in doc){
//do something here with "node"
}
}
}
}
但是当我试图访问doc.DocumentElement.SelectNodes
时,我无法在列表中看到DocumentElement
。我在引用中添加了HtmlAgilityPack.dll,但我不知道是什么问题。
我有一篇文章演示了使用ASP.NET使用HAP(HTML Agility Pack)抓取DOM元素。它只是让您逐步完成整个过程。你可以看看并尝试一下。
Scraping HTML DOM elements using HtmlAgilityPack (HAP) in ASP.NET
关于你的过程它对我来说很好。我尝试过这种方式就像你做了一次改变一样。
string url = "https://www.google.com";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a"))
{
outputLabel.Text += node.InnerHtml;
}
得到了预期的输出。问题是你要求HtmlDocument对象的DocumentElement实际应该是DocumentNode。以下是HTMLAgilityPack开发人员对您遇到的问题的回复。
看看你实际在做什么:http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs。
您要求顶部元素选择与某个xpath匹配的节点。除非你的xpath表达式以//
开头,否则你要求它为相关节点,它们是后代节点。文档元素本身不是后代,因为没有元素是其自身的后代。