我有一种情况,我有很多<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标记(空标记在这里,这是我想要的)。

最佳答案

在这里可以手动删除标签并获取文本。您可以使用remove_tags()提供的功能:

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

请注意,w3lib是一个w3lib并且在内部使用。无需单独安装。
此外,最好在这里使用Scrapy dependency。继续使用Scrapy并定义输入处理器。例如,您可以为sel.xpath('b')类的特定Fields定义它:
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))

08-19 21:10