笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

项目加载器

发布者: 笨鸟自学网



声明项加载器

项加载器使用类定义语法声明。举个例子:

from itemloaders.processors import TakeFirst, MapCompose, Join
from scrapy.loader import ItemLoader

class ProductLoader(ItemLoader):

    default_output_processor = TakeFirst()

    name_in = MapCompose(str.title)
    name_out = Join()

    price_in = MapCompose(str.strip)

    # ...

如您所见,输入处理器使用 _in 当输出处理器使用 _out 后缀。您还可以使用 ItemLoader.default_input_processor 和 ItemLoader.default_output_processor 属性。

声明输入和输出处理器

如前一节所述,可以在项目加载器定义中声明输入和输出处理器,并且用这种方式声明输入处理器是非常常见的。但是,还有一个地方可以指定要使用的输入和输出处理器:在 Item Field 元数据。下面是一个例子:

import scrapy
from itemloaders.processors import Join, MapCompose, TakeFirst
from w3lib.html import remove_tags

def filter_price(value):
    if value.isdigit():
        return value

class Product(scrapy.Item):
    name = scrapy.Field(
        input_processor=MapCompose(remove_tags),
        output_processor=Join(),
    )
    price = scrapy.Field(
        input_processor=MapCompose(remove_tags, filter_price),
        output_processor=TakeFirst(),
    )
>>> from scrapy.loader import ItemLoader
>>> il = ItemLoader(item=Product())
>>> il.add_value('name', ['Welcome to my', '<strong>website</strong>'])
>>> il.add_value('price', ['&euro;', '<span>1000</span>'])
>>> il.load_item()
{'name': 'Welcome to my website', 'price': '1000'}

输入和输出处理器的优先顺序如下:

  1. 项目加载器字段特定属性: field_in 和 field_out (最优先)

  2. 字段元数据 (input_processor 和 output_processor 关键)

  3. 项目加载器默认值: ItemLoader.default_input_processor() 和 ItemLoader.default_output_processor() (最低优先级)

参见: 重复使用和扩展项目加载器 .


上一篇:项目下一篇:Scrapy shell

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 13:06 , Processed in 0.020218 second(s), 17 queries .

© 2001-2020

返回顶部