使用Xpath(HtmlXPathSelector)获取父文本和子文本

时间:2013-01-12 23:35:31

标签: python html xpath scrapy

我正在抓取一个网站,我需要从这个HTML文档中获取数值:

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

我需要提取1.950和3.400,但我无法弄清楚如何做,当一个值只在a中,而另一个值也有一个span。是否有一般方法来获取路径的父级和子级?我在scrapy使用HtmlXPathSelector框架。我可以使用路径/td/text()作为一个,/td/span/text()作为另一个,但我需要在一个查询中执行。如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

您可以尝试使用:/td//text()来选择作为td的后代的每个文本节点

答案 1 :(得分:2)

我认为你有两种方法可以解决这个问题。

使用Xpath

  

以下同胞::节点()

另一个是迭代所有tds(但这可能很讨厌)

我将以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

答案 2 :(得分:1)

你可以试试这个

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

它将提取所有没有任何html标签的文本