2014-02-26 15 views
1

請幫助修復sript。如何在兩個階段進行xpath搜索?

import lxml.html 
import requests 

doc = lxml.html.document_fromstring("""<html> 
<body> 
    <div class="wrap"> 
     <span class="one">one</span> 
     <span class="two">two</span> 
    </div> 
</body> 
</html> 
""") 

#first search 
result1 = doc.xpath('//div[@class="wrap"]') 
print(result1) 

#second search 
result2 = result1.xpath('//span/text()') 
print(result2) 

我需要劇本分兩個階段來搜索文本:

  • 第1步:搜索樹 'div.wrap',
  • 步驟2:搜索文本元素。

結果應該是 列表[「一」,「二」]

回答

4

連接兩個XPath表達式爲一:

>>> doc.xpath('//div[@class="wrap"]/span/text()') 
['one', 'two'] 

如果您需要做的是在兩個階段:

>>> result1 = doc.xpath('//div[@class="wrap"]') 
>>> result1 
[<Element div at 0x2cf5ba0>] 
>>> result1[0].xpath('.//span/text()') 
['one', 'two'] 

如果result1可以是多個項目列表,你需要一些類型的循環:

>>> [div.xpath('.//span/text()') for div in result1] 
[['one', 'two']] 
>>> [txt for div in result1 for txt in div.xpath('.//span/text()')] 
['one', 'two'] 
+1

我覺得第二個XPath表達式需要是相對的:'[div.xpath('.// span/text()')for div in result1]' –

+0

@pault。,謝謝你的評論。我相應地更新了答案。 – falsetru