Scrapy中的Item与ItemLoader对象

Scrapy之item与itemload

Item

item对象是种简单的容器,类似于python的字典,用于保存处理爬取到的内容,item的用法与字典基本一致,所以可以把item当做字典来操作

item的声明

item声明在scrapy项目的items.py中,通过class和field对象来声明

import scrapy

#item声明和Django Models比较类似,不过只有field一种字段,比Django简单
class ItemTest(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()

通过parse下的方法解析到item

item是爬取到数据的容器,我们可以用parse下的代码将数据存入item

from firstspider.items import ItemTest  #引用Item
    def parse_artical_text(self,response):
        pass

        item = ItemTest()
        name = response.css('.grid-8 .entry-header h1::text')[0].extract()
        price=  response.css('.grid-8 .entry-meta p::text')[0].extract().strip().replace('·','').strip()
        stock = response.css('.grid-8 .entry-meta p a::text')[0].extract().strip()

        item['name'] = name
        item['price] = price
        item['stock] = stock
        yield item

就是在parse下的方法里先提取数据在安装字典的方式依次写入item

更高级的方法

只用Item在字段过多的时候会显得代码量特别庞大,而且后期不好修改

from scrapy.Loader import ItemLoader

item_loader = ItemLoader(item=ItemTest,response=response)
item_loader.add_css('title','.grid-8 .entry-header h1::text')
item_loader.add_xpath('title','//id[@href ="sd"]')
item_loader.add_value('url',response.url)
item_loader.add_value('title',response.title)

使用itemloader可以使代码更简介,提取规则更容易维护,甚至可以从数据库里取到提取规则用于itemloader,更方便与后期的修改

field中的处理方法

from scrapy.loader.processors import MapCompose,TakeFirst

def filed_extract(value):   #这里处理我们的接受到的数据,以及自定义数据
    return value+".html"  

class test(scrapy.Item):
    title = scrapy.Field(
        input_process = MapCompose(file_extract),   
        output_process = TakeFirst() 
    )

Input and Output processors

Item Loader在每个(Item)字段中都包含了一个输入处理器和一个输出处理器。 输入处理器收到数据时立刻提取数据 (通过 add_xpath(), add_css() 或者 add_value() 方法) 之后输入处理器的结果被收集起来并且保存在ItemLoader内. 收集到所有的数据后, 调用 ItemLoader.load_item() 方法来填充,并得到填充后的 Item 对象. 这是当输出处理器被和之前收集到的数据(和用输入处理器处理的)被调用.输出处理器的结果是被分配到Item的最终值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值