根据子节点值选择Xpath元素

时间:2015-02-18 00:12:59

标签: python xpath scrapy

假设我有一段看起来像

的xpath
<parent elements>
    <div>
        <h2>Dog</h2>
    <div>
        <h2>Cat</h2>
        <table>
            <tbody>
                <tr>Some Text</tr>
                <tr>Some Text</tr>
                <tr>Some Text</tr>
                <tr>Some Text</tr>
                <tr>Target</tr>
            </tbody>
    <div>

我首先需要将其缩小到只有h2标签内的值为==“Cat”的div。在此之后,我需要向下钻取所述div并提取第5个tr元素。

我试图克服的问题是所有div都有独特的h2,但它们是随机顺序所以有时候带有h2 ==“Cat”的div可能是./div [1]而有时候它可能是./div [5]。一旦我用正确的h2(唯一标识符)识别div,我就可以可靠地始终精确地提取第5个tr元素。

我目前正在尝试下面的代码,但它只返回True / False

./parent_elements[div/h2 = "Web Site Information"]

非常感谢!

1 个答案:

答案 0 :(得分:1)

由于您的示例输入XML无效,我只是将其调整为:

<parent_elements>
  <div>
    <h2>Dog</h2>
    <div>
       <h2>Cat</h2>
       <table>
          <tbody>
             <tr>Some Text</tr>
             <tr>Some Text</tr>
             <tr>Some Text</tr>
             <tr>Some Text</tr>
             <tr>Target</tr>
          </tbody>
       </table>
    </div>
  </div>
</parent_elements>

对于此示例,以下XPath

//parent_elements//div[h2='Cat']//tr[5]

有结果

<tr>Target</tr>

此XPath选择第trh2元素作为Cat元素的子元素,其值parent_elements是{{1}}的子元素。