【问题标题】:Getting nested Divs using HTML Agility Pack c#使用 HTML Agility Pack c# 获取嵌套的 Div
【发布时间】:2015-08-23 07:48:46
【问题描述】:

我正在尝试抓取网页(Pub Med)以查看特定文章中出现了多少引用(有些文章有引用,有些没有)。但是,我现在遇到的问题是 div 都是嵌套的并且命名相同,所以我无法弄清楚获取元素需要什么代码。

到目前为止,我已经尝试使用 contains 来查看是否可以全部捕获并从那里挖掘到节点,但这没有奏效。

.SelectNodes("//div[contains(@class,'portlet_title')]");

我也尝试过复制 XPath,但结果是 null

.SelectNodes("//*[@id="disc_col"]/div[3]/div[1]/div/h3/span");

任何帮助将不胜感激,因为我不是 Xpath 的大师。
作为参考,符合我标准的页面是: http://www.ncbi.nlm.nih.gov/pubmed/?term=23489346(右手边说被 * 文章引用)。

我还浏览了其他一些回复,但它们似乎都是针对不同命名 Div 的结果(即get all the divs ids on a html page using Html Agility Pack)。要么我不明白如何正确使用它,要么我的问题不同。

再次感谢。

【问题讨论】:

    标签: c# html html-agility-pack


    【解决方案1】:

    迈克!尝试使用

        var titles = website.DocumentNode.SelectNodes("//div[@class='portlet_title']");
    

    您的 XPath 中的错误是: 1. 属性只写在“[]”中,并带有“@”符号,就像我写的那样; 2. 在每个 XPath 节点中,您应该编写一个索引,例如“//div[3]/div[1]/div[1]/h3[1]/span[1]”。

    祝你好运!

    【讨论】:

    • 感谢 Denis 的回复,但是使用上面的内容仍然只会让我得到字符串中的“全文链接”,因为那是第一个 div。由于所有 div 的名称都相同,因此会发生同样的问题。
    • 在更详细地研究这一点后,我意识到我需要获取的位置似乎是以 ajax 的形式进入页面的。它解释了为什么我只能获得源代码的全文链接部分,因为它下面的所有内容都与 ajax 有关。无论如何,谢谢你的尝试,我必须找到一种新的方法来获得这个号码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多