【问题标题】:Scrapy Item Loaders - understanding input and output processors?Scrapy Item Loaders - 了解输入和输出处理器?
【发布时间】:2021-08-14 01:42:36
【问题描述】:

所以从scrapy docs 我看到了:

输入处理器一收到就处理提取的数据......输入处理器的结果被收集并保存在 ItemLoader 中。收集完所有数据后,调用 ItemLoader.load_item() 方法填充并获取填充后的 item 对象。那时,使用先前收集的数据(并使用输入处理器处理)调用输出处理器。输出处理器的结果是分配给项目的最终值。

我明白了输入处理器的概念。例如,有一些数据要清理吗?只需通过适当的输入处理器运行它。我不明白的是输出处理器的目的。这在功能上与输入处理器有何不同?您不能在第一个输入处理器中包含您想要的任何数据转换吗?

【问题讨论】:

    标签: scrapy


    【解决方案1】:

    我认为输出处理器主要在使用多个(相同或不同)选择器从多个标签中提取单个项目的值时有用。

    例如:

    HTML sn-p:

     <span class="product-title">Samsung</span> 
     <p class="product-name">Color TV</p>
    

    从以上两个标签中提取名称:

    loader.add_xpath('name', '//span[@class="product-title"]/text()')
    loader.add_xpath('name', '//p[@class="product-name"]/text()')
    yield loader.load_item()
    

    现在,使用输入处理器,您可以一次处理从以上两个xpath 中提取的文本,并且被处理的文本将附加到loader 内的列表中。如果未定义输入处理器,则输出将为
    ['Samsung', 'Color TV']

    在调用 loader.load_item() 方法时,输出处理器将被调用,上面的结果列表作为输入参数,并且可以以任何方式操作以获得最终结果为 名称项目。

    默认的输出处理器Identity,它返回与输入相同的值,因此最终输出是
    {'name': ['Samsung', '彩电']}.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多