W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
隨著項目規(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??只提供了這種機制;它不會強制任何特定的裝載機集合組織——這取決于您和項目的需要。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: