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)

相关推荐

  • Python项目-Day46-Scrapy框架之利用ImagesPipeline下载图片.md

    https://blog.csdn.net/qq_37892223/article/details/82807331?utm_medium=distribute.pc_relevant_t0.none ...

  • (1条消息) Scrapy用ImagePipeline爬取网页图片

    https://blog.csdn.net/Wilson_Iceman/article/details/79200796之前的那个系列文章只是讲到了如何使用Scrapy来爬取文本数据,今天我们来介绍如 ...

  • 想要利用Python快速爬取整站图片?速进(附完整代码)

    目录 一. 爬取前的准备 二. 查看网页 三. 分析与实现 1. 先确定我们所要爬取内容的具体位置2. 存储的具体实现 (`在pipelines中处理`)3. 更新完善源码 四. 代码   快速爬取整 ...

  • 【实战视频】使用scrapy写爬虫-爬知乎live

    我其实很喜欢造轮子,一直没用过爬虫框架写爬虫.虽然知道爬虫很简单,scrapy框架也不难,但是在舒适区呆久了,真的不想学新东西,用新知识写爬虫. 今天我不止用新框架scrapy写爬虫,而且我还要使用s ...

  • 干货!一文教会你 Scrapy 爬虫框架的基本使用

    原创 投稿君 Python数据之道 收录于话题 #读者投稿 28 #Python干货分享 2 #Python 11 #项目实战 20 出品:Python数据之道 (ID:PyDataLab) 作者:叶 ...

  • scrapy实践之settings的配置

    在scrapy创建的爬虫项目中,包括了以下4个基本文件 1. items.py 2. middlewares.py 3. pipelines.py 4. settings.py items定义了需要从 ...

  • scrapy实践之中间件的使用

    在scrapy框架中,Downloader Middlewares 称之为下载中间件, 可以对爬虫的requests请求进行封装处理,典型的应用有以下3种 1. 添加用户代理 所有的中间件代码都保存在 ...

  • scrapy实践之翻页爬取

    在scrapy框架中,spider具有以下几个功能 1. 定义初始爬取的url 2. 定义爬取的行为,是否跟进链接 3. 从网页中提取结构化数据 所谓的跟进链接,其实就是自动爬取该页的所有链接,然后顺 ...

  • 徐怀书的经方实践

    徐怀书的经方实践

  • 组织活力建设:PRE 活力模型的构建与应用实践

    方向只能大致正确,组织要确保活力,这远比很多企业家功成名就了总结出来的战略思想靠谱的多. T&D 在多年第四方深度诊断与经营质量变革项目中的经验提炼总结的组织活力模型-PRE 活力模型给更多的 ...

  • 微服务实践之分布式定时任务

    承接上篇:上篇文章讲到改造 go-zero 生成的 app module 中的 gateway & RPC .本篇讲讲如何接入 异步任务 以及 log的使用. Delay Job 日常任务开放 ...

  • 华为高管揭秘:华为公司业务变革与IT治理实践

    2015年,华为预期实现销售收入3900亿人民币(约合600.6亿美元)左右,利润.现金流稳定增长,成为其聚焦管道战略以来见效显著的一年. 华为轮值CEO郭平在新年致辞中表示:新一年中,华为将开始5- ...

  • 对茯苓四逆汤的思考与实践

    作者/周威 茯苓四逆汤是<伤寒论>中的沧海遗珠,医家对此方少有关注.笔者在临证时发现适用此方的场合并不少见.故不揣简陋,将自己对茯苓四逆汤的思考与实践,简述如下,供同仁参考. 一.文献考察 ...

  • 7种人力资源最佳实践

    什么是人力资源最佳实践? 最佳实践是一套通用的人力资源管理流程和行动.在人力资源管理研究中,有两种关于如何管理人员的思想流派:第一个是最合适的,第二个是最佳实践. 最合适的观点指出,为了增加价值,人力 ...