不能让Scrapy / Xpath注意到双重

时间:2014-04-01 06:37:33

标签: python xpath scrapy

我正在尝试使用scrapy来抓取一些诗歌,我有这样的文字:

Lorem ipsum dolor sit amet,<br>  
consectetuer adipiscing elit.<br> 
<br> 
Aenean commodo ligula eget dolor.<br> 
Aenean massa

我用这样的scrapy选择它的xpath:

In [1]: sel.xpath('//div[@class="box"]/text()').extract()
Out[1]:
[u'Lorem ipsum dolor sit amet,',
 u'consectetuer adipiscing elit.',
 u'Aenean commodo ligula eget dolor.',
 u'Aenean massa',]

我怎样才能做到这一点它不会忽略额外的br?

1 个答案:

答案 0 :(得分:3)

XPath查询强制 Scrapy不返回<br>标记

Scrapy会忽略<br>标记,因为您告诉它这样做。你XPath查询

//div[@class="box"]/text()

选择//div[@class="box"]的所有直接文本节点子节点,并仅选择它们。其中任何其他节点类型都被忽略,其中包括<br>标记。

将搜索范围扩展为<br>代码

如果您还想要返回<br>个令牌,请同时选择文本节点和<br>令牌:

(//div[@class="box"]/text() | //div[@class="box"]/br)

现在,循环遍历所有结果。如果您通过文本节点返回其内容,则(<br>)标记将返回换行符。