【问题标题】:How to avoid a specific tag while extracting xpath提取xpath时如何避免特定标签
【发布时间】:2017-02-24 20:07:08
【问题描述】:

通过使用 xpath(.//div[@class="entry-content"]/div/p//text()') 我得到了所有的 text1,text2,.....text6。如何只取"text3","text4","text5","text6"??

`<div class="entry-content">
   <div>
     <p>
     <st>text1</st>
     </p>
     <p>
     <st>text2</st>
     </p>
   </div>
   <p>"text3"</p>
   <div>
     <p>
     <st>"text4"</st>
     </p>
     <p>
     <st>"text5"</st>
     </p>
     <p>
     <st>"text6"</st>
     </p>
   </div>
</div>`

【问题讨论】:

  • 选择背后的逻辑是什么?是要忽略第一个“div”子节点吗?
  • 我需要通过避免包含 text1 的前两个 &lt;p&gt; 标签来提取 "text3","text4","text5","text6" text2

标签: python python-2.7 python-3.x xpath


【解决方案1】:

如果您只想要第二个div 内的节点,请使用路径

.//div[@class="entry-content"]/div[2]/p//text()

如果想要除第一个之外的所有divs 中的节点,请写

.//div[@class="entry-content"]/div[position()>1]/p//text()

如果您想在其他基础上进行选择,请说明您要应用哪些规则。 (您的问题是“避免使用特定标签”,但您对要避免使用的标签非常不确定)。

【讨论】:

  • 我的意思是避免包含 text1 和 text2 的前两个

    标签

  • 先生,您在这里提到的这两个代码产生相同的输出(输出是“text4”,“text5”,“text6”)。我还需要

    "text3"

【解决方案2】:

根据您的说明,“p”似乎是您要避免的节点,尤其是前两个节点。由于它们可能出现在不同的深度级别,您实现它的一种方法是使用此 xpath 表达式,这基本上是 Michael Kay 提供的解决方案的变体:

//div[@class="entry-content"]//descendant::p[position()>2]//text()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多