我有几个网页具有以下结构
<div id="w_33086" class = "eight columns">
<h2 id="about">About<span itemprop="name">Name of Place</span></h2>
<p style="margin-top: 0px;">
.
.
.
<p class="contactAdvisor"><a href="http://www.example.com/contact">
两段之间的文本和标记非常易变,因为它是通过个人用户创建的。在某些情况下,它包括标记,在某些情况下它不包括。当它包含标记时,标记可以变化很大。
我试图选择这两个<p>
之间的所有文字和标记但是没有成功。
我取得的最佳成绩来自于// div [id =&#39; w_33086&#39;] / node()
但是,如果存在<p>
标记,则会丢弃它。它还会选择我想要排除的<h2>
代码和<p class="contactAdvisor">
。
我使用Google表格(和Screaming Frog)来应用xpath
答案 0 :(得分:0)
如果两个<p>
元素是彼此的兄弟姐妹,那么您可以尝试
//div[id='w_33086']/p[@style="margin-top: 0px;"]/
following-sibling::node()[following-sibling::p[@class="contactAdvisor"]]
这假设<p>
下只有一个<div id="w_33086">
具有style
或class
属性值(分别),我们用它来识别它们。
请注意,XPath不会选择任何“标记”。它选择节点,如文本节点,元素(附加了后代)和属性。这些节点可以序列化为标记,但这不是XPath的业务。