W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
隨著項(xiàng)目規(guī)模的擴(kuò)大和蜘蛛數(shù)量的增加,維護(hù)成為一個(gè)基本問(wèn)題,特別是當(dāng)您必須為每個(gè)蜘蛛處理許多不同的解析規(guī)則時(shí),有許多異常,但也希望重用公共處理器。
項(xiàng)目加載器旨在減輕解析規(guī)則的維護(hù)負(fù)擔(dān),而不會(huì)失去靈活性,同時(shí)為擴(kuò)展和重寫規(guī)則提供了方便的機(jī)制。因此,項(xiàng)目加載器支持傳統(tǒng)的Python類繼承來(lái)處理特定spider(或spider組)的差異。
例如,假設(shè)某個(gè)特定站點(diǎn)用三個(gè)破折號(hào)(例如 ?---Plasma TV---
? )你不想最后在最終的產(chǎn)品名稱中刪除這些破折號(hào)。
下面介紹如何通過(guò)重用和擴(kuò)展默認(rèn)的產(chǎn)品項(xiàng)加載器來(lái)刪除這些破折號(hào)。 (?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)
擴(kuò)展項(xiàng)加載器非常有用的另一種情況是當(dāng)您有多個(gè)源格式時(shí),例如XML和HTML。在XML版本中,您可能希望刪除 ?CDATA
? 發(fā)生。下面是一個(gè)如何操作的示例:
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)
這就是您通常如何擴(kuò)展輸入處理器的方法。
對(duì)于輸出處理器,在字段元數(shù)據(jù)中聲明它們更為常見,因?yàn)樗鼈兺ǔV灰蕾囉谧侄?,而不依賴于每個(gè)特定的站點(diǎn)解析規(guī)則(與輸入處理器一樣)。參見: 聲明輸入和輸出處理器 .
有許多其他可能的方法來(lái)擴(kuò)展、繼承和重寫項(xiàng)加載器,不同的項(xiàng)加載器層次結(jié)構(gòu)可能更適合不同的項(xiàng)目。??Scrapy??只提供了這種機(jī)制;它不會(huì)強(qiáng)制任何特定的裝載機(jī)集合組織——這取決于您和項(xiàng)目的需要。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: