2017-07-05 143 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" 

哪些解決我的問題。