scrapy爬虫自定义item转换函数

1、在Item中添加自定义函数

如日期转换函数

# 定义一个时间处理转换函数
# 将 '2022-12-28' 转换成 datetime.date(2022, 12, 28)
def date_convert(value):
    try:
        create_date = datetime.datetime.strptime(value, "%Y-%m-%d").date()
    except Exception as e:
        create_date = datetime.datetime.now().date()

    return create_date

2、定义item数据项时,配置输入处理器input_processor和输出处理器output_processor,并引入自定义转换函数

class newsItem(scrapy.Item):
    # news标题
    title = scrapy.Field()
    # news发布时间
    news_date = scrapy.Field(
        input_processor = MapCompose(date_convert),
        output_processor = TakeFirst()
    )

以上2步骤即可完成item数据项的自定义转换。

说明:TakeFirst() 返回第一个非空(non-null/ non-empty)值,常用于单值字段的输出处理器,无参数

Field 字段参数:

  • input_processor(输入处理器),对item数据项字段值传过来时,进行预处理。
  • output_processor(输出处理器),对item数据项 输出前的预处理。

item数据的处理过程:

  • 第一步, 通过 add_xpath(), add_css() 或者 add_value() 方法),提取到数据。
  • 第二步,将提取到的数据,传递到输入处理器(input_processor)中进行处理,处理结果被收集起来,并且保存在ItemLoader内(但尚未分配给该Item)。
  • 第三步,最后调用输出处理器(output_processor)来处理之前收集到的数据(这是最后一步对数据的处理)。然后再存入到Item中,输出处理器的结果是被分配到Item的最终值。
  • 第四步,收集到所有的数据后, 调用ItemLoader.load_item() 方法来填充,并得到填充后的 Item 对象。

注意事项:input_processor和output_processor都是可调用对象,调用时传入需要被分析的数据,处理后返回分析得到的值。因此你可以使用任意函数作为输入、输出处理器。唯一需注意的是它们必须接收一个(并且只是一个)迭代器性质的参数。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值