class XkdItemLoader(ItemLoader): default_output_processor = TakeFirst()
ItemLoader类的语法:scrapy.loader.ItemLoader([ item,selector,response,] ** kwargs )
,它能够接收一个 Item 实例来指定要加载的 Item,而后指定 r来肯定要解析的内容esponse 或者 selector; ItemLoader 实例还提供不少方法,如提供add_css()方法和add_xpath()方法来经过 css 和xpath 解析赋值,或使用add_value()方法来单独进行赋值等。css
更多其余的用法你们能够查看:https://doc.scrapy.org/en/latest/topics/loaders.htmlhtml
ItemLoader.load_item()
方法对结果进行解析并保存到一个item中,而后返回这个item;def parse_analyse(self, response): # 构建loader xkd_itemload = MyItemLoader(item=XkdDribbbleSpiderItem(), response=response) image_url = response.meta.get('a_image_url') # 经过loader定位元素和解析元素 xkd_itemload.add_css('title', "[role='article'] header h1") # 注意这里传递的是一个列表 xkd_itemload.add_value('image_url', [image_url]) xkd_itemload.add_value('url', response.url) xkd_itemload.add_value('url_id', get_md5(response.url)) xkd_itemload.add_css('date', 'p span.date::text') # 解析元素以后返回item xkd_item = xkd_itemload.load_item() # 将item返回 yield xkd_item
修改item数据模型,须要导入from scrapy.loader.processors import MapCompose
,能够在scrapy.Field中加入处理函数。MapCompose是一种处理器,由给定功能的组合构成,相似于Compose处理器,与此处理器的不一样之处在于内部结果在函数之间传递的方式;scrapy
Scrapy还给咱们提供了一个scrapy.loader.processors.TakeFirst()
方法,用于返回第一个非空值(至关于extract_first()方法),经常使用于单值字段的输出处器,无参数;ide
from scrapy.loader.processors import TakeFirst, MapCompose from datetime import datetime def str_to_date(str_date): str_date = str_date.strip() date = datetime.strptime(str_date, '%b %d, %Y').date() return date.strftime('%Y-%m-%d') class XkdDribbbleSpiderItem(scrapy.Item): title = scrapy.Field() image_url = scrapy.Field( output_processor = MapCompose(lambda value: value) ) date = scrapy.Field( input_processor = MapCompose(str_to_date) ) image_path = scrapy.Field() url = scrapy.Field() url_id = scrapy.Field()