將抓取數據解析進行結構化:
基礎方法: ?
spider: ?獲取網頁頁面response 》 選擇器提取內容 ?》 對內容進行處理 》傳遞給item字段
使用加載機制:
spider:
spider:獲取網頁頁面response 》 加載器提取內容(使用選擇器) ?》 傳遞給item處理
item:定義item對象的同時并配置內容處理函數 》處理1 》處理2》最終賦值
加載器數據提取方法:
spider:
from scrapy.loader import ItemLoader #導入模塊,基本用法,實際使用自定義復寫
item_loader= ItemLoader(item=XxxItem(),response=response)#實例化,傳入item實例對象,response對象)
#三個核心函數,參數item字段名,選擇器方法或其他值,生成一個列表對象
item_loader.add_css("title",".entry h1::text")
item_loader.add_xpath("title",'//div/a[id="555"]/text()')
item_loader.add_value("url", response.url)
my_item = item_loader.laod_item()
yield my_item?
item:
item 的字段對象有兩個參數:
input_processor = MapCompose()# 表示對傳遞給item字段的值做一個預處理,使用內置的MapCompose,按函數順序對傳遞進來的列表的每個值進行處理(可使用匿名函數)
output_processor = TakeFirst() #對預處理玩的值進行輸出到item容器,使用內置函數:獲取列表的第一個值
重載 itemload方法:來配置默認獲取列表第一個值,定義一空函數來替換默認配置
from scrapy.loader.processors import MapCompose ,TakeFirst
from scrapy.loader import ItemLoader?
def func1(value):
return value
def ret(value)
returnvalue
class MyItemLoaderl(ItemLoaderL):
default_output_processor = ?TakeFirst()
class CrawlItem(scrapy.Item):
title = scrapy.Field(
input_processor=Mapcomppose( func1, func2)
output_processor = ?ret() ?#重載自定義loaderItem的默認方法,獲取原始列表
)