Item
有关Item的简介及创建,可参考命令行工具
数据入库
数据自动入库,除了根据mysql表生产item外,也可以直接给item赋值,示例如下:
from feapder import Itemitem = Item()item.table_name = "spider_data" # 表名item.title = titleyield item
等价于:
生成item
from feapder import Itemclass SpiderDataItem(Item):"""This class was generated by feapder.command: feapder create -i spider_data."""def __init__(self, *args, **kwargs):# self.id = Noneself.title = None
使用
item = SpiderDataItem()item.title = titleyield item
Item指纹
item指纹用于数据入库前的去重,默认为所有字段值排序后计算的md5,但当数据中有采集时间时,这种指纹计算方式明显不合理。因此我们可以通过如下方法指定参与去重的key
from feapder import Itemclass SpiderDataItem(Item):__unique_key__ = ["title", "url"] # 指定去重的key为 title、url,最后的指纹为title与url值联合计算的md5def __init__(self, *args, **kwargs):# self.id = Noneself.title = Noneself.url = Noneself.crawl_time = None
或可通过如下方式指定__unique_key__
item = SpiderDataItem()item.unique_key = ["title", "url"] # 支持列表、元组、字符串
或者重写指纹函数
from feapder import Itemclass SpiderDataItem(Item):...@propertydef fingerprint(self):return "我是指纹"
入库前对item进行处理
pre_to_db函数为每个item入库前的回调函数,可通过此函数对数据进行处理
from feapder import Itemclass SpiderDataItem(Item):def __init__(self, *args, **kwargs):# self.id = Noneself.title = Nonedef pre_to_db(self):"""入库前的处理"""self.title = self.title.strip()
更新数据
采集过程中,往往会有些数据漏采或解析出错,如果我们想更新已入库的数据,可将Item转为UpdateItem
item = SpiderDataItem.to_UpdateItem()
或直接修改继承类
from feapder import Item, UpdateItemclass SpiderDataItem(UpdateItem):...
关于UpdateItem使用,详见UpdateItem
