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实现换行符转换的脚本的教程
Apr 16 Python
Python线程创建和终止实例代码
Jan 20 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
Python importlib动态导入模块实现代码
Apr 16 Python
django为Form生成的label标签添加class方式
May 20 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
Pandas数据结构之Series的使用
Mar 31 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遍历目录viewDir函数
2009/12/15 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
简单的分页代码js实现
2016/05/17 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
js仿360开机效果
2019/12/26 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python 追踪except信息方式
2020/04/25 Python
python初步实现word2vec操作
2020/06/09 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
幼师辞职信范文
2015/02/27 职场文书
升学宴家长答谢词
2015/09/29 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang