MapCompose()可出路多个函数来处理纸然后返回。举个栗子,如果要给某个字符串加上一个前缀,可以定义一个这样的方法:
from scrapy.item import Item
from scrapy。loader import ItemLoader
from scrapy import Field
from scrapy.loader.processors import MapCompose,Takefirst,Join
def str_convert(value):
return 'haha_' + value
调用时
class Item(Item):
title = Field(
input_processor=MapCompose(str_convert),
)
这样就会在每个title字段前面加上了haha_。
在字段中去除一些你不想要的东西,如果某个字段包含“abc”,而你不想要的话:
def remove_smt(value):
if "abc" in value:
return None
else:return value
class Item(Item): title = Field( input_processor=MapCompose(remove_smt(), )
TakeFirst:返回第一个非空的值。
实例化对象:kk=TakeFirst()
value=kk([" ",1,2,3]) 返回的值是1
Join返回用分隔符连接后的值
proc = Join(";")
result = proc(['', 'one', 'two', 'three'])
结果result = ;one;two;three )
输入处理器input_processor和输出处理器output_processor
class articleDetailItem(scrapy.Item):
title = scrapy.Field()
date = scrapy.Field(
转换前是'date':'\r\n\r\n 2018/03/14 · '
转换后是'date': datetime.date(2018, 3, 14),
input_processor = MapCompose(date_convert),
output_processor = TakeFirst()
)
url = scrapy.Field(
转换前是'url': ['http://blog.jobbole.com/113771/']
转换后是'url': 'http://blog.jobbole.com/113699/'
output_processor = TakeFirst()
)