scrapy 2.3 重復(fù)使用和擴展項目加載器

2021-06-09 10:08 更新

隨著項目規(guī)模的擴大和蜘蛛數(shù)量的增加,維護成為一個基本問題,特別是當(dāng)您必須為每個蜘蛛處理許多不同的解析規(guī)則時,有許多異常,但也希望重用公共處理器。

項目加載器旨在減輕解析規(guī)則的維護負擔(dān),而不會失去靈活性,同時為擴展和重寫規(guī)則提供了方便的機制。因此,項目加載器支持傳統(tǒng)的Python類繼承來處理特定spider(或spider組)的差異。

例如,假設(shè)某個特定站點用三個破折號(例如 ?---Plasma TV---? )你不想最后在最終的產(chǎn)品名稱中刪除這些破折號。

下面介紹如何通過重用和擴展默認(rèn)的產(chǎn)品項加載器來刪除這些破折號。 (?ProductLoader? ):

from itemloaders.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)

擴展項加載器非常有用的另一種情況是當(dāng)您有多個源格式時,例如XML和HTML。在XML版本中,您可能希望刪除 ?CDATA? 發(fā)生。下面是一個如何操作的示例:

from itemloaders.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)

這就是您通常如何擴展輸入處理器的方法。

對于輸出處理器,在字段元數(shù)據(jù)中聲明它們更為常見,因為它們通常只依賴于字段,而不依賴于每個特定的站點解析規(guī)則(與輸入處理器一樣)。參見: 聲明輸入和輸出處理器 .

有許多其他可能的方法來擴展、繼承和重寫項加載器,不同的項加載器層次結(jié)構(gòu)可能更適合不同的項目。??Scrapy??只提供了這種機制;它不會強制任何特定的裝載機集合組織——這取決于您和項目的需要。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號