获取xpath()以返回空值

时间:2014-06-27 19:53:28

标签: python html xpath web-scraping scrapy

我的情况是我有很多<b>标签:

<b>12</b>
<b>13</b>
<b>14</b>
<b></b>
<b>121</b>

如您所见,倒数第二个标记为空。我打电话的时候:

sel.xpath('b/text()').extract()

这给了我:

['12', '13', '14', '121']

我想:

['12', '13', '14', '', '121']

有没有办法获得空值?


我目前的工作是致电:

sel.xpath('b').extract()

然后自己解析每个html标签(空标签就在这里,这就是我想要的)。

1 个答案:

答案 0 :(得分:3)

这是可以手动剥离标签并获取文本的地方。您可以使用remove_tags()提供的w3lib功能:

>>> from w3lib.html import remove_tags
>>> map(remove_tags, sel.xpath('//b').extract())
[u'12', u'13', u'14', u'', u'121']

请注意w3libScrapy dependency并在内部使用。无需单独安装。

此外,最好在此处使用Scrapy Input and Output Processors。继续使用sel.xpath('b')并定义输入处理器。例如,您可以为Field类的特定Item定义它:

from scrapy.contrib.loader.processor import MapCompose
from scrapy.item import Item, Field
from w3lib.html import remove_tags

class MyItem(Item):
    my_field = Field(input_processor=MapCompose(remove_tags))