item load 机制

2017-10-02  本文已影响0人  eleksbai

将抓取数据解析进行结构化:

基础方法:  

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的默认方法,获取原始列表

)

上一篇 下一篇

猜你喜欢

热点阅读