带有中间元素的LXML的XPath

时间:2015-08-05 18:16:30

标签: python xpath lxml

我试图用python和LXML抓取一些页面。我的测试页是http://www.sarpy.com/oldterra/prop/PDisplay3.asp?ParamValue1=010558233

我和大多数XPath都有好运。例如,

tree.xpath('/html/body/table/tr[1]/td[contains(text(), "Sales Information")]/../../tr[3]/td[1]/text()')

成功获得了我列出的第一笔销售日期。我也有其他几件。但是,我无法在销售日期前列出B& P.例如,第一次销售的B& P是200639333。

我在页面结构中注意到在B& P项目的tr之前有一个表单元素。由于它是下一个表行,我尝试按如下方式递增tr索引:

tree.xpath('/html/body/table/tr[1]/td[contains(text(), "Sales Information")]/../../tr[4]/td[1]/text()')

返回:

['\r\n           ']

由于字符串中的换行符和子元素以及字段内的输入,我尝试将text()转换为text()[1],text()[2]等,但没有运气。

我尝试将相邻表单的路径基于此:

tree.xpath('/html/body/table[7]/form[@action="../rod/ImageDisplay.asp"]/following-sibling::tr/td[1]/text()')

没有运气。

我认为有两个潜在的问题:可能打破索引模式的中间表单元素和空白。我非常感谢你帮助纠正这个xpath。

1 个答案:

答案 0 :(得分:0)

您正在寻找的<tr><form>的孩子,而不是其兄弟,请尝试 -

tree.xpath('/html/body/table/tr[1]/td[contains(text(), "Sales Information")]/../../form[1]/td[1]/text()')

这可能会让你200639333有很多空格。

或 -

tree.xpath('/html/body/table[7]/form[@action="../rod/ImageDisplay.asp"]/tr[1]/td[1]/text()')

对于所有这些元素。