scrapy实践之item pipeline的使用

欢迎关注”生信修炼手册”!

spider以item的形式返回结构化的信息,这些信息会传递给item pipeline进行处理。在这个环节,我们可以根据需要对数据进一步处理,经典的处理场景有以下几种

1. 去重复

根据业务场景来判断重复,然后去掉重复项,代码如下

from scrapy.exceptions import DropItem

# 去重复
class DedupPipeline:
    def __init__(self):
        self.link_set = set()

    def process_item(self, item, spider):
        link = item['miRNA'] + item['target']
        if link in self.link_set:
            raise DropItem(item)
        self.link_set.add(link) 
        return item

2. 验证数据

对数据的有效性进行验证,保留有效数据,代码如下

class ValidatePipeline:
    def process_item(self, item, spider):
        invalid_miRNAs = ['bta-miR-15b', 'bta-miR-10a']
        if item['miRNA'] in invalid_miRNAs:
            raise DropItem(item)
        return item

3. 写入文件

将item中的信息,保存到文件中,代码如下

# 写入文件
class ExportPipeline:
    def __init__(self):
        self.file = open('items.tsv', 'w')

    def process_item(self, item, spider):
        line = '{}\t{}\t{}\n'.format(item['miRNA'], item['target'], item['species'])
        self.file.write(line)
        return item

4. 持久化

将item中的信息,存储到数据库中,以sqlite3为例,代码如下

class WritedbPipeline:

    def open_spider(self, spider):
        conn = sqlite3.connect('test.db')
        cursor = conn.cursor()
        cursor.execute('''CREATE TABLE IF NOT EXISTS target (mirna text, gene text, species text, UNIQUE(mirna, gene, species))''')
        self.conn = conn
        self.cursor = cursor


    def close_spider(self, spider):
        self.conn.commit()
        self.conn.close()

    def process_item(self, item, spider):
        c = self.cursor
        c.execute('INSERT INTO target VALUES (?, ?, ?)', (item['miRNA'], item['target'], item['species']))
        return item

在pipelines.py中,每个类定义了一个组件,对于多个组件,需要在settings.py中进行配置,控制多个组件的使用顺序,代码如下

ITEM_PIPELINES = {
   'hello_world.pipelines.ValidatePipeline': 200,
   'hello_world.pipelines.DedupPipeline': 300,
   'hello_world.pipelines.ExportPipeline': 400,
   'hello_world.pipelines.WritedbPipeline': 500,
}

后面的数字位于0到800之间,表示优先级,数字越低,优先级越高。‍

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值