2013-01-12 113 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标签的文字