在</sup>中解析<sup>标签

时间:2013-11-26 21:18:15

标签: html xpath scrapy

我正在尝试xpath解析包含以下行的HTML文档:

<td class="ficha ficha_izq">Emisiones de CO<sub>2</sub> (gr/km)</td>

我正在使用scrapy,结果是:

[<Selector xpath='//td[contains(@class,"ficha_izq")]/node()' data=u'Emisiones de CO'>, <Selector xpath='//td[contains(@class,"ficha_izq")]/node()' data=u'<sub>2</sub>'>, <Selector xpath='//td[contains(@class,"ficha_izq")]/node()' data=u' (gr/km)'>]

所以,三件而不是一件。我不介意标签,所以如何获得包含以下内容的单个项目

Emisiones de CO2 (gr/km)

这不是一个案例,我有几个包含标签的项目,所以我需要一些编程解决方案。

有任何线索吗?

谢谢!

注意:使用text()而不是node()没有帮助:

[<Selector xpath='//td[contains(@class,"ficha_izq")]/text()' data=u'Emisiones de CO'>, <Selector xpath='//td[contains(@class,"ficha_izq")]/text()' data=u' (gr/km)'>]

2 个答案:

答案 0 :(得分:1)

此xpath应该有效//td[contains(text(),'Emisiones de CO')]/node()

答案 1 :(得分:1)

使用w3lib.html.remove_tags。您可以将其与ItemLoader一起使用。

In [1]: html = '<td class="ficha ficha_izq">Emisiones de CO<sub>2</sub> (gr/km)</td>'

In [2]: sel = Selector(text=html)

In [3]: map(remove_tags, sel.xpath('//td').extract())
Out[3]: [u'Emisiones de CO2 (gr/km)']

使用XPath或CSS选择器的替代方案:

In [4]: u''.join(sel.xpath('//td[contains(@class,"ficha_izq")]//text()').extract())
Out[4]: u'Emisiones de CO2 (gr/km)'

In [5]: u''.join(sel.css('td.ficha_izq ::text').extract())
Out[5]: u'Emisiones de CO2 (gr/km)'

请注意td.ficha_izq::text之间的空格,::text CSS伪元素是CSS选择器的Scrapy扩展。