Scrapy支持自定義數據解析邏輯通過編寫自定義的Item Loader和Item。Item Loader是用來規范化和清洗提取到的數據的,而Item則是用來保存解析后的數據的。
首先,你需要定義一個Item類,用來保存解析后的數據。例如:
import scrapy
class MyItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
接下來,你可以定義一個自定義的Item Loader,用來實現數據的解析邏輯。例如:
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose, TakeFirst
class MyItemLoader(ItemLoader):
default_input_processor = MapCompose(str.strip)
default_output_processor = TakeFirst()
name_in = MapCompose(str.strip)
price_in = MapCompose(lambda x: float(x.replace('$', '')) if x else None)
在Spider中,你可以使用自定義的Item Loader來解析數據并創建Item對象。例如:
from scrapy import Spider
from myproject.items import MyItem
from myproject.loaders import MyItemLoader
class MySpider(Spider):
name = 'example'
start_urls = ['http://example.com']
def parse(self, response):
loader = MyItemLoader(item=MyItem(), response=response)
loader.add_css('name', 'div.product-name::text')
loader.add_css('price', 'span.price::text')
yield loader.load_item()
在這個例子中,我們使用自定義的Item Loader來解析網頁中的產品名稱和價格,并創建一個MyItem對象。通過自定義Item Loader,你可以定義更加靈活和具體的數據解析邏輯,以滿足你的需求。