当前位置: 首页 > 知识库问答 >
问题:

需要一个xpath表达式来提取一个特定的节点及其两个兄弟姐妹(如果他们在那里)

赫连琦
2023-03-14

有一个锚定标记,有时后跟一个或两个跨度标记。我必须根据与中文本的相等性比较来选择anchor的href

  1. 所有三个标签(achor,兄弟跨度1和兄弟跨度2)
  2. 两个标签(锚,兄弟姐妹1)
  3. 仅在锚标签中

在任何时候,上述对于锚定器的特定布置之一将是真实的,兄弟跨度1和兄弟跨度2。如果在上面的标签排列中找到文本,我希望该锚标签的href用于进一步处理。

示例:考虑下面的HTML片段

<table class="table table-striped" width="95%">
    <tbody>
      <tr>
        <td ><span class="badge">P</span>
    <a href="/abc" title="Title of anchor">some text</a>
    (
    <span style="font-weight:600;color:#666">ABC</span> 
    <span style="font-weight:600;color:#666">DEF</span>
    )
      </td>
      </tr>
    </table>

现在,我想从锚、跨度和跨度的排列中获得所有的文本,即“一些文本ABC DEF”,我将检查它是否包含我的字符串,恰好是ABC DEF(文本中应该有完整的字符串)和现在的时间得到锚的href,因为我的字符串在文本中。

共有1个答案

公良云
2023-03-14

我建议单独检查它们,因为xpath可能非常复杂,甚至会让你的程序变慢。

另一个技巧是创建一个选择器,其中只包含您知道的包含必要信息的部分(如果整个文档足够大,这将非常有帮助):

from scrapy import Selector
...
sel = Selector(text=response.css('table.table').extract_first())
anchor_selector = sel.css('a')
anchor_text = anchor_selector.css('::text').extract_first()
span_siblings = anchor_selector.xpath('./following-sibling::span/text()').extract()
# now play with anchor_text and the list of span_siblings
 类似资料:
  • 我试图定位页面上的特定元素,但无法找到要使用的适当Xpath。 以下是HTML(注意每个div的位置可能不同): 我可以通过以下操作(使用JAVA)成功定位标签: 并且我可以成功地定位第一个元素下的第一个输入(但我可能并不总是想要第一个元素): 所以问题是(i)输入的名称标记和值总是不同的,所以它们不能用来选择元素;(ii)带有姓氏标签的div可能不总是第二个;(iii)标签和span是同一级别的

  • 问题内容: 我有两个同级元素,每个元素都包含动态内容。 在某些情况下,然后会有更多的内容,反之亦然。我希望第二个元素的高度始终等于第一个元素的高度。如果的高度更大,则其高度将溢出div,因此可以滚动。 有什么方法可以通过Flexbox做到这一点? 问题答案: 是的,有可能。让兄弟姐妹单独设置最大高度,并设置其他人的和,然后根据规范将其扩展到他们兄弟姐妹的高度。没有绝对定位。没有设置任何元素的高度。

  • 问题内容: 我正在尝试使用NHibernate 3.0的LINQ接口执行以下操作。我想查询一个对象(使用一些Where子句),并加载一些子代和孙代。目前,我正在这样做: 但是,这将导致所有子孙之间的笛卡尔积(每个结果行包含许多列)。这在这里由“ ayende”讨论。另一方面,我得到了一次往返,这与拆分查询然后进行合并不同。 在仍使用NHibernate的LINQ接口的情况下,如何更好地(在SQL和

  • 基本上是新的反应,我有点困惑如何正确地传递组件之间的状态。我发现一个类似的问题已经出现了——将表单元素状态传递给兄弟/父元素的正确方法是什么?但是我想知道你能否给我一个关于下面代码的具体答案。 目前应用的结构包括: 父组件- 2个孩子:和 目标是对我的Meteor收藏进行异步搜索,并仅显示与搜索词匹配的

  • 我需要把绳子接上 到目前为止,我有这个,但不知道如何截断实际的“字符串分隔符”: