在包含xpath和lxml的匹配项后,如何查找X单元格的值

时间:2018-10-05 02:10:29

标签: html xpath html-parsing lxml

我有一个包含多行的文档,该文档在第4个TD元素中有一个值,我不知道该如何检索。标记中没有唯一的标记,因此我必须根据单词TOTAL进行匹配,然后从现有行的第4个TD中获得所需的值。这是一个用于说明的TR:

<TR>
<TD ALIGN="right" COLSPAN="30" bgcolor=d8caca><div class=small4>SECTION TOTAL</div></TD>
<TD ALIGN="right" COLSPAN="8" bgcolor=d8caca> &nbsp; </TD>
<TD ALIGN="right" COLSPAN="13" bgcolor=gold><div class=small4>  11.907531</div> 
</TD>
<TD ALIGN="right" COLSPAN="13" bgcolor=gold><div class=small4>     $773.10</div></TD>
</TR>

我想匹配单词“ TOTAL”,然后在三个单元格之后精确获取值,在这种情况下为$ 773.10。

这成功地将一个数组中的每个“ TOTAL”文本都正确地收集到了

titles = tree.xpath("//tr/td[contains(., 'TOTAL')]//text()")

但是,我无法获取最后一个元素中的值。我已经尝试了以下各种搜索方式,以求总计:TOTAL,然后尝试使用跟随或跟随同胞无济于事:

totals = tree.xpath("//tr/td[contains(., 'TOTAL')]/../following::td[4]/div/text()")

...但是我要么从TOTAL之后的下一个TD获得一个不可破坏的空间数组,要么根本没有数据,要么当扩展为文本时为“ element”引用。匹配包含之后,如何在现有TR中的td [4]中正确获取值?

我正在尝试使所有事件都发生,而不仅仅是发生一次,因此标题和总计数组是1:1匹配的。如果有一种方法可以实现key => value配对,那就更好了。

1 个答案:

答案 0 :(得分:0)

您可以使用following-sibling轴来获取td之后的td,该td在同一父级中包含文本“ TOTAL”,然后进一步过滤结果以仅获取此类的最后一个[last()]使用谓词div/text(),然后返回子元素query = "//tr/td[contains(., 'TOTAL')]/following-sibling::td[last()]/div/text()" titles = tree.xpath(query)

test = db.session.query(table).filter(table.colA== 'known', (func.year(table.sDate)) == '2018'
        , (func.month(table.sDate)) >= '7', (func.month(table.sDate)) <= '9')

xpathtester演示:http://www.xpathtester.com/xpath/5cf0aa473d030da66de1bec73bcb8795