我目前正在使用 Ruby 和 xPath 开发一个小型网络抓取项目。不幸的是,该网站的结构非常糟糕,这导致我遇到了一个小问题:
<h3>Relevant Headline</h3>
<p class="class_a class_b">Content starts in this paragraph...</p>
<p class="class_a ">...but this content belongs to the preceding paragraph</p>
<p class="class_a class_b">Content starts in this paragraph...</p>
<p class="class_a ">...but this content belongs to the preceding paragraph</p>
<h3>Some other Headline</h3>
如您所见,有 2 个 h3-Tags 构成了几个 p-tags。我希望选择所有带框的 p-tags。我已经找到了以下 xPath 来做到这一点:
h3[contains(text(),"Relevant")]/following-sibling::p[1 = count(preceding-sibling::h3[1] | ../h3[contains(text(),"Relevant")])]
但现在困难来了:上面的这两个段落属于一起。带有 class_b 的段落(第一个)开始一个新的数据条目,下一个(第二个)属于该条目。3和4是一样的。问题是:有时 3 个段落属于一起,有时 4 个段落属于一起,但大多数时候有一对段落属于一起。
如何按组选择这些内部段落并将它们组合成 Ruby 中的一个字符串?