scrapy管道的使用

学习目标:
  1. 掌握 scrapy管道(pipelines.py)的使用

之前我们在scrapy入门使用一节中学习了管道的基本使用,接下来我们深入的学习scrapy管道的使用

1. pipeline中常用的方法:

  1. process_item(self,item,spider):

    • 管道类中必须有的函数
    • 实现对item数据的处理
    • 必须return item
  2. open_spider(self, spider): 在爬虫开启的时候仅执行一次
  3. close_spider(self, spider): 在爬虫关闭的时候仅执行一次

2. 管道文件的修改

继续完善wangyi爬虫,在pipelines.py代码中完善

  • myCode:
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import json
from pymongo import MongoClientclass WangyiPipeline:# def __init__(self):#     self.file = open('wangyi.json','w')def open_spider(self,spider):if spider.name == 'job':self.file = open('wangyi.json','w',encoding='utf-8')def process_item(self, item, spider):if spider.name == 'job':# 将item对象转换成字典类型item = dict(item)# 将字典类型数据转换成字符串str_data = json.dumps(item,ensure_ascii=False) +',\n'self.file.write(str_data)return itemdef close_spider(self,spider):if spider.name == 'job':self.file.close()class WangyiSimplePipeline:# def __init__(self):#     self.file = open('wangyi.json','w')def open_spider(self,spider):if spider.name == 'job_simple':self.file = open('wangyiSimple.json','w',encoding='utf-8')def process_item(self, item, spider):if spider.name == 'job_simple':# 将item对象转换成字典类型item = dict(item)# 将字典类型数据转换成字符串str_data = json.dumps(item,ensure_ascii=False) +',\n'self.file.write(str_data)return itemdef close_spider(self,spider):if spider.name == 'job_simple':self.file.close()class MongoPipeline(object):def open_spider(self,spider):self.client = MongoClient('127.0.0.1',27017)self.db = self.client['itcast']self.col = self.db['wangyi']def process_item(self,item,spider):# 将item对象转换成字符串data =dict(item)# 将data写入数据库self.col.insert(data)return itemdef close_spider(self,spider):self.client.close()
import json
from pymongo import MongoClientclass WangyiFilePipeline(object):def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次if spider.name == 'itcast':self.f = open('json.txt', 'a', encoding='utf-8')def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次if spider.name == 'itcast':self.f.close()def process_item(self, item, spider):if spider.name == 'itcast':self.f.write(json.dumps(dict(item), ensure_ascii=False, indent=2) + ',\n')# 不return的情况下,另一个权重较低的pipeline将不会获得itemreturn item  class WangyiMongoPipeline(object):def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次if spider.name == 'itcast':# 也可以使用isinstanc函数来区分爬虫类:con = MongoClient(host='127.0.0.1', port=27017) # 实例化mongoclientself.collection = con.itcast.teachers # 创建数据库名为itcast,集合名为teachers的集合操作对象def process_item(self, item, spider):if spider.name == 'itcast':self.collection.insert(item) # 此时item对象必须是一个字典,再插入# 如果此时item是BaseItem则需要先转换为字典:dict(BaseItem)# 不return的情况下,另一个权重较低的pipeline将不会获得itemreturn item

3. 开启管道

在settings.py设置开启pipeline

......
ITEM_PIPELINES = {'myspider.pipelines.ItcastFilePipeline': 400, # 400表示权重'myspider.pipelines.ItcastMongoPipeline': 500, # 权重值越小,越优先执行!
}
......

别忘了开启mongodb数据库 sudo service mongodb start
并在mongodb数据库中查看 mongo

思考:在settings中能够开启多个管道,为什么需要开启多个?

  1. 不同的pipeline可以处理不同爬虫的数据,通过spider.name属性来区分
  2. 不同的pipeline能够对一个或多个爬虫进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存
  3. 同一个管道类也可以处理不同爬虫的数据,通过spider.name属性来区分

4. pipeline使用注意点

  1. 使用之前需要在settings中开启
  2. pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过:权重值小的优先执行
  3. 有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
  4. pipeline中process_item的方法必须有,否则item没有办法接受和处理
  5. process_item方法接受item和spider,其中spider表示当前传递item过来的spider
  6. open_spider(spider) :能够在爬虫开启的时候执行一次
  7. close_spider(spider) :能够在爬虫关闭的时候执行一次
  8. 上述俩个方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬虫关闭的时候断开和数据库的连接

小结

  • 管道能够实现数据的清洗和保存,能够定义多个管道实现不同的功能,其中有个三个方法

    • process_item(self,item,spider):实现对item数据的处理
    • open_spider(self, spider): 在爬虫开启的时候仅执行一次
    • close_spider(self, spider): 在爬虫关闭的时候仅执行一次

四、scrapy爬虫框架——scrapy管道的使用相关推荐

  1. python3 scrapy爬虫_Python3 Scrapy爬虫框架(Scrapy/scrapy-redis)

    Python3 Scrapy爬虫框架(Scrapy/scrapy-redis) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog..net/Rozol/article/ ...

  2. scrapy爬虫框架[scrapy.core.scraper]ERROR downloading Error processing

    [scrapy爬虫框架ERROR downloading error processing] [scrapy.core.scraper] ERROR: Spider error processing ...

  3. 二、scrapy爬虫框架——scrapy构造并发送请求

    scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模 应用 构造Request对象,并发送请求 应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过 ...

  4. 三、scrapy爬虫框架——scrapy模拟登陆

    scrapy模拟登陆 学习目标: 应用 请求对象cookies参数的使用 了解 start_requests函数的作用 应用 构造并发送post请求 1. 回顾之前的模拟登陆的方法 1.1 reque ...

  5. scrapy爬虫框架及运行流程

    文章目录 1 scrapy 简介 1.1 什么是爬虫? 1.2 浏览网页的过程中发生了什么? 1.3 scrapy爬虫框架 1.4 scrapy爬虫框架优势 2 scrapy 构架图 3 Scrapy ...

  6. 第五章 Scrapy爬虫框架(5.1 Scrapy框架基础)

    Scrapy是一个高级Web爬虫框架,用于爬取网站并从页面中提取结构化数据.它可以用于数据挖掘.数据监控和自动化测试等多个方面.与之前讲过的Requests库和Selenium库不同,Scrapy更适 ...

  7. Scrapy 爬虫框架四 —— 动态网页及其 Splash 渲染

    一.前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送给我 ...

  8. 爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战

    From:https://piaosanlang.gitbooks.io/spiders/content/ scrapy-cookbook :https://scrapy-cookbook.readt ...

  9. 开源 Python网络爬虫框架 Scrapy

    开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓 ...

最新文章

  1. redis的数据结构||1) 字符串类型2) 哈希类型3) 列表类型4) 集合类型 5) 有序集合类型详解
  2. Appweb(CVE-2018-8715)漏洞复现与思考
  3. linux update语句,关于Update语句的调整(5-1)
  4. 家庭NAS存储服务器给我们带来了什么
  5. 基于MATLAB的模糊聚类
  6. ad7606中文资料_AD7606-6 pdf,AD7606-6中文资料,AD7606-6应用电路-华秋商城
  7. CVPR引起巨大争议的新技术Face2Face:当科技先进到让人害怕
  8. 双系统linux grub rescue,WindowsUbuntu双系统一键Ghost,提示grub rescue的解决方法
  9. 惠州电子计算机职业学校,惠州市十大中专学校排名
  10. 看完了 vue-cli 源码,总结了这几个点
  11. 我爱Flask框架之Flask简介与URL和视图介绍
  12. Sox语音转换的相关知识
  13. 资源卫星应用中心下载WFV数据
  14. 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试
  15. Transition飞行汽车来了,采用电力驱动且可陆空两用...
  16. php 代码下载_php实现文件下载代码分享
  17. 学习人工智能必知的7个步骤,零基础也能看懂
  18. Android开发中 Cause: couldn‘t make a guess for错误
  19. 计算机太阳,计算机可以学习在大量太阳图像中查找太阳耀斑和其他事件
  20. 从信息化和数字化切入,聊一下建筑行业的数字化转型

热门文章

  1. java伪协议_通过伪协议解决父页面与iframe页面通信的问题
  2. Python 散点图线性拟合_机器学习之利用Python进行简单线性回归分析
  3. 计算机系统结构sw指令集,自考02325计算机系统结构复习资料六
  4. tornado学习笔记day08-tornado中的异步
  5. tornado学习笔记day01-高并发性能web框架
  6. Django-安装xadmin的方法及主要配置方法
  7. Python基础总结之常用内置方法总结
  8. 精雕道路怎么遍弧形_【养护技术】道路“创可贴”——沥青冷补料 六大优势助力道路养护...
  9. 服务器系统server 2008,windows server 2008 R2 操作系统
  10. Oracle开启关闭归档日志