我知道在scrapy中我们可以定义自定义项目,或者只是返回简单的Python命令。我Scrapy documentation有一个特定的页面Item Loaders说:
项目加载器提供了一种方便的机制,用于填充所抓取的项目。尽管项目可以直接填充,但项目加载器提供了一个更方便的API,通过自动执行一些常见任务(如在分配原始提取数据之前解析原始提取数据),从抓取过程中填充它们。
此外,在下一节中,当解释Item Pipelines时,有一个使用Item Adapters清理价格的示例:
from itemadapter import ItemAdapter
from scrapy.exceptions import DropItem
class PricePipeline:
vat_factor = 1.15
def process_item(self, item, spider):
adapter = ItemAdapter(item)
if adapter.get("price"):
if adapter.get("price_excludes_vat"):
adapter["price"] = adapter["price"] * self.vat_factor
return item
else:
raise DropItem(f"Missing price in {item}")
字符串
为什么他们不使用项目加载器并声明一个处理器来清理或重写序列化器方法来清理价格?
我只是不明白项目加载器和项目适配器之间的区别。我似乎也找不到任何一个好的文档或任何博客文章或stackoverflow问题来描述两者之间的关系。
1条答案
按热度按时间a0x5cqrl1#
他们有点困惑,我同意。但他们有不同的目的:
不幸的是,关于这两个方面的文档并不多(我猜你可以找到更多关于加载器的信息,但是idk)。但是,它们是独立的组件,因为它们处理不同的问题,您可能希望使用它们两者,一个或两个都不使用。
希望这对你有帮助:)