將抓取數(shù)據(jù)解析進(jìn)行結(jié)構(gòu)化:
基礎(chǔ)方法: ?
spider: ?獲取網(wǎng)頁頁面response 》 選擇器提取內(nèi)容 ?》 對內(nèi)容進(jìn)行處理 》傳遞給item字段
使用加載機(jī)制:
spider:
spider:獲取網(wǎng)頁頁面response 》 加載器提取內(nèi)容(使用選擇器) ?》 傳遞給item處理
item:定義item對象的同時并配置內(nèi)容處理函數(shù) 》處理1 》處理2》最終賦值
加載器數(shù)據(jù)提取方法:
spider:
from scrapy.loader import ItemLoader #導(dǎo)入模塊,基本用法,實(shí)際使用自定義復(fù)寫
item_loader= ItemLoader(item=XxxItem(),response=response)#實(shí)例化,傳入item實(shí)例對象,response對象)
#三個核心函數(shù),參數(shù)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 的字段對象有兩個參數(shù):
input_processor = MapCompose()# 表示對傳遞給item字段的值做一個預(yù)處理,使用內(nèi)置的MapCompose,按函數(shù)順序?qū)鬟f進(jìn)來的列表的每個值進(jìn)行處理(可使用匿名函數(shù))
output_processor = TakeFirst() #對預(yù)處理玩的值進(jìn)行輸出到item容器,使用內(nèi)置函數(shù):獲取列表的第一個值
重載 itemload方法:來配置默認(rèn)獲取列表第一個值,定義一空函數(shù)來替換默認(rèn)配置
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的默認(rèn)方法,獲取原始列表
)