【问题标题】:How to extract an xpath sibling elements that are some number of elements (n) away from another sibling element?如何提取与另一个兄弟元素相距一定数量的元素(n)的xpath兄弟元素?
【发布时间】:2018-04-13 00:44:39
【问题描述】:

我一直在解析github文档页面的HTML,在这个过程中学习了一点xpath。

我想知道这里是否有人知道一种方法来提取距离原始元素 n 个单位的任何兄弟元素。在我的示例中,我试图提取在我解析的元素的 10 个单位内的元素。

我从github api documentation 中获取我的元素

然后在 python 中使用 selenium,我从 xpath 语句中返回了一个元素列表:

'//pre/code'

从这里我对上面xpath中包含的文本做一些分析,最后想返回上面xpath元素10个单位以内的元素。

非常感谢您提供的任何帮助。

【问题讨论】:

  • “n 个单位”是指在一定数量 (n) 的同级元素内。现在将更正,我想可以删除链接。也不确定链接是否会降低答案的质量,即使它确实下降了......
  • 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
  • 我很欣赏@JeffC 的链接阅读它,并将相应地格式化问题! :)

标签: xml python-3.x selenium-webdriver xpath


【解决方案1】:

对于这个 XML,

<r>
  <pre id="i1"><code/></pre>
  <pre id="i2"><code/></pre>
  <pre id="i3"><code/></pre>
  <pre id="i4"><code/></pre>
  <pre id="i5"><code/></pre>
  <pre id="i6"><code/></pre>
  <pre id="i7"><code/></pre>
  <pre id="i8"><code/></pre>
  <pre id="i9"><code/></pre>
</r>

这个 XPath 1.0 表达式,

//pre[   @id="i5"
      or following-sibling::pre[3 >= position()][@id="i5"]
      or preceding-sibling::pre[3 >= position()][@id="i5"]]

将选择 i5 pre 元素以及前面的 3 个和后面的 3 个同级 pre 元素,

<pre id="i2"><code/></pre>
<pre id="i3"><code/></pre>
<pre id="i4"><code/></pre>
<pre id="i5"><code/></pre>
<pre id="i6"><code/></pre>
<pre id="i7"><code/></pre>
<pre id="i8"><code/></pre>

根据要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多