使用dataclass项¶默认情况下, dataclass items 创建时要求传递所有字段。在使用带有项加载器的dataclass项时,这可能是一个问题:除非将预先填充的项传递给加载程序,否则将使用加载程序的 克服这个问题的一种方法是使用 from dataclasses import dataclass, field
from typing import Optional
@dataclass
class InventoryItem:
name: Optional[str] = field(default=None)
price: Optional[float] = field(default=None)
stock: Optional[int] = field(default=None)
输入和输出处理器¶项目加载器为每个(项目)字段包含一个输入处理器和一个输出处理器。输入处理器一旦接收到提取的数据(通过 让我们看一个例子来说明如何为一个特定的字段调用输入和输出处理器(这同样适用于任何其他字段):: l = ItemLoader(Product(), some_selector)
l.add_xpath('name', xpath1) # (1)
l.add_xpath('name', xpath2) # (2)
l.add_css('name', css) # (3)
l.add_value('name', 'test') # (4)
return l.load_item() # (5)
所以发生的是:
值得注意的是,处理器只是可调用的对象,它们与要解析的数据一起调用,并返回已解析的值。所以你可以使用任何函数作为输入或输出处理器。唯一的要求是它们必须接受一个(而且只有一个)位置参数,这将是一个iterable。 在 2.0 版更改: 处理器不再需要是方法。 注解 输入和输出处理器都必须接收iterable作为其第一个参数。这些函数的输出可以是任何东西。输入处理器的结果将被附加到一个内部列表中(在加载程序中),其中包含收集的值(对于该字段)。输出处理器的结果是最终分配给项目的值。 您需要记住的另一件事是,输入处理器返回的值在内部收集(在列表中),然后传递给输出处理器来填充字段。 最后,但并非最不重要, itemloaders 有一些 commonly used processors 内置方便。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-9-8 12:59 , Processed in 0.016182 second(s), 17 queries .