将抓取数据解析进行结构化:
基础方法:
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的默认方法,获取原始列表
)