爬虫蜘蛛项目加载器Item Loader类详解之重用和扩展项加载器详解 (23)python SCRAPY最新教程1.51以上版本
随着您的项目变得越来越大并获得越来越多的蜘蛛,维护成为一个基本问题,特别是当您必须为每个蜘蛛处理许多不同的解析规则,有很多例外,但也想重用通用处理器时。
项目加载器旨在减轻解析规则的维护负担,同时不失去灵活性,同时提供扩展和覆盖它们的便捷机制。因此,Item Loaders支持传统的Python类继承,以处理特定蜘蛛(或蜘蛛组)的差异。
例如,假设某个特定站点用三个破折号(例如)包含其产品名称,并且您不希望最终在最终产品名称中删除这些破折号。---Plasma TV---
以下是通过重用和扩展默认Product Item Loader(ProductLoader
)来删除这些破折号的方法:
from scrapy.loader.processors import MapCompose
from myproject.ItemLoaders import ProductLoader
def strip_dashes(x):
return x.strip('-')
class SiteSpecificLoader(ProductLoader):
name_in = MapCompose(strip_dashes, ProductLoader.name_in)
扩展项加载器非常有用的另一种情况是,当您有多种源格式时,例如XML和HTML。在XML版本中,您可能希望删除CDATA
事件。以下是如何执行此操作的示例:
from scrapy.loader.processors import MapCompose
from myproject.ItemLoaders import ProductLoader
from myproject.utils.xml import remove_cdata
class XmlProductLoader(ProductLoader):
name_in = MapCompose(remove_cdata, ProductLoader.name_in)
这就是您通常扩展输入处理器的方式。
对于输出处理器,更常见的是在字段元数据中声明它们,因为它们通常仅依赖于字段而不依赖于每个特定站点解析规则(如输入处理器那样)。另请参见: 声明输入和输出处理器。
还有许多其他可能的方法来扩展,继承和覆盖您的Item Loaders,并且不同的Item Loaders层次结构可能更适合不同的项目。Scrapy只提供机制; 它不会强加您的Loaders集合的任何特定组织 – 这取决于您和您的项目的需求。
评论被关闭。