2013-01-12 78 views
2

我刮的網站,我需要從這個HTMLDocument的得到的數值:同時獲得父母和孩子文本使用XPath(HtmlXPathSelector)

<td> 
<span style=" color: red; font-weight: bold;"> 1.950</span> 
</td> 
<td> 3.400</td> 

我需要提取兩個1.950和3.400,但我無法弄清楚如何做到這一點,當一個值只在一個,而另一個也有一個跨度。有沒有一種通用的方法來獲得父母和孩子的路徑?我正在使用scrapy框架和HtmlXPathSelector。我可以使用一個路徑/td/text(),另一個使用/td/span/text(),但我需要在一個查詢中完成。這怎麼能實現?

回答

4

你可以嘗試使用:/td//text()選擇是的td

2

我認爲你有兩種方法來解決這個問題的後裔每個文本節點。

使用XPath

以下同胞::節點()

,另一種是迭代的所有TD(但是這可能是討厭)

我會給你一個Xpath示例

span_text = hxs.select("/td/span/text()") 
next = span_text.select('following-sibling::node()') #you should get 3.400 (or with this idea :P) 

如果您有此xml:

<?xml version="1.0" encoding="UTF-8"?> 

<root> 
    <td> 
    <span style=" color: red; font-weight: bold;">1.950</span> 
    </td> 
    <td>3.400</td> 
</root> 

,並在執行此XPath表達式:

//td/following-sibling::node() 

你會得到3.400

this is a good place to test xpath

1

你可以試試這個

.select("string()").extract()

它會提取所有沒有任何html標籤的文字