爬虫蜘蛛项目加载器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集合的任何特定组织 – 这取决于您和您的项目的需求。
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。