【问题标题】:Select elements with attribute data-url using HTMLAgilityPack使用 HTMLAgilityPack 选择具有属性 data-url 的元素
【发布时间】:2012-07-10 16:27:35
【问题描述】:

我正在编写一个小下载机器人,它正在为它自己搜索较低层中的链接。

我需要找到的是 html 页面中的所有链接(指向 .jpg 文件的链接以及指向 .pgn、.pdf、.html、.... - 文件的链接)

我正在使用 html-agilitypack 查找所有 a-href 链接。

示例代码:

foreach (HtmlNode link in htmlDocument.DocumentNode.SelectNodes("//a[@href]"))
{
    HtmlAttribute attribute = link.Attributes["href"];
    links.Add(attribute.Value);
}

但我也想找到数据网址。

我必须使用什么 XPath 语法来查找数据 URL。 htmlcode 中的示例 data-url:

    <div class="cbreplay" data-url="2012\edmonton\partien.pgn"></div>

我需要这个示例中的“2012\edmonton\partien.pgn”。如何使用 XPath 语法实现这一点?

最好的问候,如果我犯了一些严重的错误,请告诉我。这是我的第一个问题。

【问题讨论】:

    标签: c# .net html-agility-pack


    【解决方案1】:

    以下应该做你想做的事:

    foreach (HtmlNode divNode in htmlDocument.DocumentNode.SelectNodes("//div[@data-url]"))
    {
        HtmlAttribute attribute = divNode.Attributes["data-url"];
        links.Add(attribute.Value);
    }
    

    实际上,//div[@data-url] 语句应该选择所有具有 data-url 属性的节点。然后我们把这个属性拉出来。

    如果除 div 之外还有其他节点具有此属性,那么 //*[@data-url] 应该可以解决问题。

    【讨论】:

    • 使用* 代替div - "//*[@data-url]" 可能更灵活。那些该死的 html 作者不断改变他们的 html!
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多