Python:Scrapy框架中Item Pipeline组件使用详解


Posted in Python onDecember 27, 2017

Item Pipeline简介

Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,他的主要任务是清晰、验证和存储数据。
当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数据。
每个Item管道的组件都是有一个简单的方法组成的Python类。
他们获取了Item并执行他们的方法,同时他们还需要确定的是是否需要在Item管道中继续执行下一步或是直接丢弃掉不处理。

Item管道通常执行的过程有

清理HTML数据
验证解析到的数据(检查Item是否包含必要的字段)
检查是否是重复数据(如果重复就删除)
将解析到的数据存储到数据库中

编写自己的Item Pipeline

编写item管道其实是很容易的。
每个Item管道的组件都是由一个简单的方法组成的Python类:

process_item(item, spider)

每一个item管道组件都会调用该方法,并且必须返回一个item对象实例或raise DropItem异常。
被丢掉的item将不会在管道组件进行执行
此外,我们也可以在类中实现以下方法

open_spider(spider)

当spider执行的时候将调用该方法

close_spider(spider)

当spider关闭的时候将调用该方法
Item Pipeline例子

代码如下:

from scrapy.exceptions import DropItem 
 
class PricePipeline(object): 
 
  vat_factor = 1.15 
 
  def process_item(self, item, spider): 
    if item['price']: 
      if item['price_excludes_vat']: 
        item['price'] = item['price'] * self.vat_factor 
      return item 
    else: 
      raise DropItem("Missing price in %s" % item)

注:VAT:ValueAddedTax(增值税)

以上代码可以过滤那些没有价格的产品,并且对那些不包括增值税产品的价格进行调整

将抓取的items以json格式保存到文件中

从spider抓取到的items将被序列化为json格式,并且以每行一个item的形式被写入到items.jl文件中

代码:

import json 
 
class JsonWriterPipeline(object): 
 
  def __init__(self): 
    self.file = open('items.jl', 'wb') 
 
  def process_item(self, item, spider): 
    line = json.dumps(dict(item)) + "\n" 
    self.file.write(line) 
    return item

注:JsonWriterPipeline的目的是介绍如何编写项目管道。如果想要保存抓取的items到json文件中,推荐使用Feedexports

删除重复项

假设在spider中提取到的item有重复的id,那么我们就可以在process_item函数中进行过滤

如:

from scrapy.exceptions import DropItem 
 
class DuplicatesPipeline(object): 
 
  def __init__(self): 
    self.ids_seen = set() 
 
  def process_item(self, item, spider): 
    if item['id'] in self.ids_seen: 
      raise DropItem("Duplicate item found: %s" % item) 
    else: 
      self.ids_seen.add(item['id']) 
      return item

激活ItemPipeline组件

在settings.py文件中,往ITEM_PIPELINES中添加项目管道的类名,就可以激活项目管道组件

如:

ITEM_PIPELINES = { 
  'myproject.pipeline.PricePipeline': 300, 
  'myproject.pipeline.JsonWriterPipeline': 800, 
}

The integer values you assign to classes in this setting determine the order they run in- items go through pipelines from order number low to high

整数值通常设置在0-1000之间

总结

以上就是本文关于Python:Scrapy框架中Item Pipeline组件使用详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python Tkinter简单布局实例教程
Sep 03 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
Python Pexpect库的简单使用方法
Jan 29 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
python中eval与int的区别浅析
Aug 11 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
基于python实现计算两组数据P值
Jul 10 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
python实现的web监控系统
Apr 27 Python
手把手教你python实现SVM算法
Dec 27 #Python
Python中使用支持向量机SVM实践
Dec 27 #Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 #Python
Python简单生成随机姓名的方法示例
Dec 27 #Python
ubuntu中配置pyqt4环境教程
Dec 27 #Python
Python中Threading用法详解
Dec 27 #Python
SVM基本概念及Python实现代码
Dec 27 #Python
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python矩阵常见运算操作实例总结
2017/09/29 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
在Python中定义一个常量的方法
2018/11/10 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python实现单链表的方法示例
2019/09/03 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
python画环形图的方法
2020/03/25 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
五水共治一句话承诺
2014/05/30 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
高三语文复习计划
2015/01/19 职场文书
项目建议书
2015/02/04 职场文书
幼师小班个人总结
2015/02/12 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
上学路上观后感
2015/06/16 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript