长芯存储 (News) 芯片封装主页/ 长芯存储 / scrapy系列Item Pipeline —- 数据存储三部曲
< 返回列表

scrapy系列Item Pipeline —- 数据存储三部曲

我们今天需要学习的是Itme  pipeline 

什么是?

在一个项目被爬虫抓取后,

它被发送到项目管道,

该项目管道通过顺序执行的几个组件处理它。

每个项目管道组件(有时简称为“项目管道”)

是一个实现简单方法的Python类。

他们收到一个项目并对其执行操作,

同时决定该项目是否应继续通过管道

或被丢弃并且不再处理。

项目管道的典型用途是:

1、清理HTML数据

2、验证已删除的数据(检查项目是否包含某些字段)

3、检查重复项(并删除它们)

4、将已删除的项目存储在数据库中

这在我们的入门案例中属于那一部分呢

pipelines.py

对的就是这个文件

同时这个需要配合item.py使用

item.py定义字段

pipelines.py存储数据

pipelines的结构

import something
class SomethingPipeline(object): def __init__(self): # 可选实现,做参数初始化等 # doing something
def process_item(self, item, spider):   # item (Item 对象) – 被爬取的item # spider (Spider 对象) – 爬取该item的spider # 这个方法必须实现,每个item pipeline组件都需要调用该方法, # 这个方法必须返回一个 Item 对象,被丢弃的item将不会被之后的pipeline组件所处理。 return item
def open_spider(self, spider): # spider (Spider 对象) – 被开启的spider # 可选实现,当spider被开启时,这个方法被调用。
def close_spider(self, spider): # spider (Spider 对象) – 被关闭的spider # 可选实现,当spider被关闭时,这个方法被调用

记住每一个

项目管道组件

必须实现下面这个方法的Python类:

  • process_item(self, item, spider)
  • 为每个项目管道组件调用此方法。
  • process_item() 必须:
  • 返回包含数据的dict,
  • 返回Item (或任何后代类)对象,
  • 返回Twisted Deferred或引发 DropItem异常。
  • 丢弃的项目不再由其他管道组件处理。

我们看看案列中的pipelines.py


import json

class CsdnspiderPipeline(object):
# def __init__(self): # self.file = open('teacher.json', 'w', encoding='utf-8') #我们可以使用open__spider来建立文件 #open__spider 在爬虫启动是调用 #__init__ 在实例创建是调用,两者实现的效果是一样的 def open_spider(self,spider): self.file = open('teacher.json', 'w', encoding='utf-8')
def process_item(self, item, spider):
content = json.dumps(dict(item), ensure_ascii=False) + "\n" #每一天信息保存在一行 '\n' self.file.write(content)
return item
def close_spider(self, spider): self.file.close()

当然我们定义了管道就需要激活它

在setting.py文件

ITEM_PIPELINES = {

'myproject.pipelines.CsdnspiderPipeline': 800,
}

您在此设置中为类分配的

整数值决定了它们运行的顺序:

项目从较低值到较高值类别。

习惯上在0-1000范围内定义这些数字。

这个怎么理解

就是说我们对于不同的管道

数字决定不同管道之间的启动顺序

(针对于实例csdn)

我们在pipelines.py 中定义一个类

实现筛选

学生数量大于1000

课程数量大于100

的讲师信息存储


class Csdn(): def process_item(self, item, spider): if int(item.get('num_students')) > 1000:
if int(item.get('num_courses')) > 100: return item

激活管道

我们需要将筛选的管道

先于存储管道激活

选择后再进行存储

ITEM_PIPELINES = {
"CSDNSpider.pipelines.Csdn": 200, "CSDNSpider.pipelines.CsdnspiderPipeline": 300,}

启动爬虫

scrapy crawl CSDN

我们看一下效果

管道的基础运用到这里就结束了

最后我们讲一下存储数据

的一个过程

存储数据三部曲

这是一个丑出天际的图

大家将就着看吧

item定义字段

spider使用定义的字段

来定义内容,返回一个item

pipelines接受这个item

并进行存储

· 2019-08-12 08:58  本新闻来源自:python工程人,版权归原创方所有

阅读:995
  • 联系长芯

    重庆总部:重庆市长寿区新市街道新富大道5号佳禾工业园8栋2层
    电话:023 40819981 (前台)

    深圳办事处:深圳市南山区留仙大道 1213 号众冠红花岭工业南区 2 区 1 栋 1 楼
    电话:0755-26975877 (前台)

    电子邮件:sales@longcore.com

    网址:http://www.longcore.com