HTML Agility Pack

11

我正在尝试使用HTML Agility Pack从以下位置获取描述文本:

<meta name="description" content="**this is the text i want to extract and store in a string**" />

有人在Stackoverflow上建议我使用HTMLAgilityPack。但是我不知道如何使用它,而且我找到的文档(包括下载文件中的文档)都有无效链接,因此无法查看文档。

请问有人可以帮我解决这个问题吗?


1
我有点困惑 - 你是否已经构建了HtmlAgilityPack?是示例无法构建还是核心dll无法构建?如果是后者,你引用了什么? - Marc Gravell
谢谢Marc。我已经编辑了我的问题并删除了那部分,以避免进一步的混淆。现在想想,那个具体的部分与我的问题并不相关,而是一些信息,说明我为什么要问这个问题。 - jay_t55
我已经成功在我的应用程序中添加了对dll文件的引用,因此我可以“使用”HtmlAgility Pack。 - jay_t55
1
请查看此重复问题: https://dev59.com/ZXRA5IYBdhLWcg3wvQhh - Ash
1
仅供参考(因为这个问题出现在“GetAttributeValue”方法的谷歌搜索结果中),第二个参数是在找不到属性时返回的默认值。以下是该方法的完整定义:/// <summary> /// 帮助方法,用于获取此节点的属性值。如果未找到该属性,则将返回默认值。 /// </summary> /// <param name="name">要获取的属性的名称。不能为<c>null</c>。</param> /// <param name="def">如果未找到,则返回的默认值。</param> /// <returns>属性的值 - alf
2个回答

18

用法与 XmlDocument 非常相似;您可以使用 MSDN 上的 XmlDocument 进行广泛概述;您可能还想了解 xpath 语法 (MSDN)。

示例:

HtmlDocument doc = new HtmlDocument();
doc.Load(path); // or .LoadHtml(html);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//meta[@name='description']");
if (node != null) {
    string desc = node.GetAttributeValue("content", "");
    // TODO: write desc somewhere
}
< p > GetAttributeValue 的第二个参数是在未找到属性时返回的默认值。


node.GetAttributeValue("content", "");中的第二个字符串参数(空字符串)有什么用? - Alex
@AlexW - 我目前手头没有那个库,请问该参数叫什么? - Marc Gravell
不确定参数名称...稍后会跟踪定义路径以找出。感谢在这里的回答,非常有用。 - Alex
3
"def" 代表默认值。如果未找到属性,则返回该值。在此发表评论是因为这是谷歌搜索答案的最佳结果。 - Brian

0

public string HtmlAgi(string url, string key) {

公共字符串 HtmlAgi(字符串网址,字符串密钥) {
    var Webget = new HtmlWeb();
    var doc = Webget.Load(url);
    HtmlNode ourNode = doc.DocumentNode.SelectSingleNode(string.Format("//meta[@name='{0}']", key));

    if (ourNode != null)
    {


            return ourNode.GetAttributeValue("content", "");

    }
    else
    {
        return "not fount";
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接