3

我正在尝试使用 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,但我不知道是什么问题。

4

2 回答 2

12

我有一篇文章演示了使用 ASP.NET 使用 HAP(HTML 敏捷包)抓取 DOM 元素。它只是让您逐步完成整个过程。你可以看看并尝试一下。

在 ASP.NET 中使用 HtmlAgilityPack (HAP) 抓取 HTML DOM 元素

关于你的过程,它对我来说很好。我已经尝试过这种方式,就像您对单个更改所做的那样。

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开发人员对您面临的问题的回复。

HTMLDocument.DocumentElement 不在对象浏览器中

于 2013-11-09T02:10:09.790 回答
1

您看到的行为是正确的。

看看你实际在做什么: http: //htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs

您要求顶部元素选择与某些 xpath 匹配的节点。除非您的 xpath 表达式以 a 开头,否则您//是在向它询问相对节点,它们是后代节点。一个文档元素不是它自己的后代,因为没有一个元素是它自己的后代。

于 2013-11-08T23:14:48.087 回答