2017-07-05 95 views
0

我正在读html页面作为一个字符串,并使用tree = html.fromstring(data)与蟒蛇LXML使用XPath查询HTML

我现在想用LXML的XPath查询。下面是我很感兴趣的部分的一个例子。

<table class="class"> 
<tbody> 
    <tr> 
    <th class="classTh"> 
    Overall 
    </th> 
    <td class="classTd"> 
    <span class="classSpan"> 
    GREEN 
    </span> 
    </td> 
    </tr> 
</tbody> 
</table> 

与呼叫

xpath = '//table/tbody/tr[th="Overall"]/td/span' 
e = tree.xpath(xpath) 
    for i in e: 
    print(i.text) 

我使用XPath得到我所需要的数据。但我无法使xpath正常工作。在任何在线测试程序中使用这个精确的代码+ xpath对我来说都适用。

我曾尝试使用XPath:

xpath = '//table/tbody/tr[th]/td/span' 

这让我所有的元素,而不是用正确的过滤器值的人。

xpath ='//table/tbody/tr[td/span]/th' 

得到我所有的过滤器值。

所以我的问题。如何正确地在我的xpath中应用文本值过滤器?

+0

当您使用在线XPath测试工具进行尝试时,您可以使用已执行的JavaScript处理网页,而您的表可能会动态生成,HTTP请求,urllib等HTTP库只能为您提供页面源而不执行JavaScript – Andersson

+0

因为2个最新的xpath查询用于确认我查询的数据是正确的,所以我不认为这会对数据本身造成任何问题。相反,我的印象是它的查询问题。或者我错过了这一点? :) – Martin

回答

1

对于此XPath在LXML的语法如下:

xpath = "//table/tbody/tr[th[contains(text(), 'Overall')]]/td/span" 

哪些解决我的问题。