我试图用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。
答案 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()')
对于所有这些元素。