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 相关文章推荐
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 Python
python文件和目录操作函数小结
Jul 11 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
python3的pip路径在哪
Jun 23 Python
python中if嵌套命令实例讲解
Feb 25 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
js验证表单第二部分
2006/11/25 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
Python算法应用实战之栈详解
2017/02/04 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Django实现文件上传和下载功能
2019/10/06 Python
python多线程使用方法实例详解
2019/12/30 Python
详解Python中import机制
2020/09/11 Python
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
一些Solaris面试题
2013/03/22 面试题
商务英语专业自荐信
2013/10/14 职场文书
欢度春节标语
2014/07/01 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
安全守法证明
2015/06/23 职场文书
七一晚会主持词
2015/06/29 职场文书
人代会简报
2015/07/21 职场文书
禁毒主题班会教案
2015/08/14 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
R9700摩机记
2022/04/05 无线电