我的情况是我有很多<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标签(空标签就在这里,这就是我想要的)。
答案 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']
请注意w3lib
是Scrapy 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))