1

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

我有下面的 html,所有三个部分都有相同的格式。我正在使用 htmlagilitypack 从标题和日期中提取数据。我的代码正确提取了标题,但日期仅从第一个实例中提取并重复 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 代码:

<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

任何帮助深表感谢。

4

1 回答 1

1

您需要锚定您的第二个 XPath 以查看“下方” h4

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

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

于 2014-01-02T20:03:09.690 回答