如何使用HtmlAgilityPack获取几个类似的标签数据?

时间:2014-01-02 19:56:45

标签: html-agility-pack data-extraction

在解释之前,我使用的是VB.net和HtmlAgilityPack。

我有以下html,所有三个部分都具有相同的格式。我正在使用htmlagilitypack从Title和Date中提取数据。我的代码正确提取标题,但日期仅从第一个实例中提取并重复3次:

HtmlAgilityPack代码:

For Each h4 As HtmlNode In docnews.DocumentNode.SelectNodes("//h4[(@class='title')]")
    Dim date1 As HtmlNode = docnews.DocumentNode.SelectSingleNode("//span[starts-with(@class, 'date ')]")
    Dim newsdate As String = date1.InnerText
    MessageBox.Show(h4.InnerText)
    MessageBox.Show(newsdate)
Next

我认为在每个h4中,我都会相应地得到相关日期......

HTML code:

<div  class="article-header" style="" data-itemid="920729" data-source="ABC" data-preview="Text 1">
<h4 class="title"><a href="URL" class="title" title="Text 1">Text for Mr. A</a></h4>
    <div class="byline">
        <span class="date timestamp"><span  title="29 November 2013">29-11-2013</span></span>
        <span class="source" title="AGE">18</span>
    </div>
    <div class="preview">Text 1 Preview</div>
</div>

<div  class="article-header" style="" data-itemid="920720" data-source="ABC" data-preview="Text 2">
<h4 class="title"><a href="URL" class="title" title="Text 2">Text for Mr. B</a></h4>
    <div class="byline">
        <span class="date timestamp"><span  title="27 November 2013">27-11-2013</span></span>
        <span class="source" title="AGE">25</span>
    </div>
    <div class="preview">Text 2 Preview</div>
</div>

<div  class="article-header" style="" data-itemid="920719" data-source="ABC" data-pre+view="Text 3">
<h4 class="title"><a href="URL" class="title" title="Text 3">Text for Mr. C</a></h4>
    <div class="byline">
        <span class="date timestamp"><span  title="22 October 2013">22-10-2013</span></span>
        <span class="source" title="AGE">20</span>
    </div>
    <div class="preview">Text 3 Preview</div>
</div>

最终输出应为:

  

A先生的文字

     

29-11-2013

     

B先生的文字

     

27-11-2013

     

C先生的文字

     

22-10-2013

我的代码是什么:

  

A先生的文字

     

29-11-2013

     

B先生的文字

     

29-11-2013

     

C先生的文字

     

29-11-2013

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要将第二个XPath锚定在h4

的“下方”
Dim date1 As HtmlNode = h4.Parent.SelectSingleNode(".//span[starts-with(@class, 'date ')]")
                        ^^^^^^^^^                   ^^^

.//告诉Xpath查看执行Xpath的节点。因此,通过SelectSingleNode调用h4.Parent,您可以获得div的父h4标记下方的日期。