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()