爬虫scrapy管道的使用

爬虫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代码中完善

# 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
import jsonfrom itemadapter import ItemAdapterclass MyspiderPipeline:def __init__(self):self.file = open('lianjia.json','w')# 爬虫文件中提取数据的方法每yield一次item,就会运行一次# 该方法为固定名称函数def process_item(self, item, spider):# 参数item默认是一个 <class 'mySpider.items.MyspiderItem'>类信息,需要处理成字典dict_data = dict(item)print(type(item), type(dict_data))# 将返回的字典数据转为JSON数据json_data = json.dumps(dict_data,ensure_ascii=False)+',\n'# 写入JSON数据self.file.write(json_data)# 参数item:是爬虫文件中yield的返回的数据对象(引擎会把这个交给管道中的这个item参数)print("建模之后的返回值:",item,)# 默认使用完管道之后将数据又返回给引擎return itemdef __del__(self):self.file.close()

3. 开启管道

在settings.py设置开启pipeline

......
ITEM_PIPELINES = {'myspider.pipelines.lianjiaPipeline': 400, # 400表示权重'myspider.pipelines.lianjiaPipeline': 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): 在爬虫关闭的时候仅执行一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组件操作系统BIOS的相关知识思维导图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、运维实施工程师需要具备的知识 1、运维工程师、实施工程师是啥&#xff1f; 2、运维工程师、实施工…

whisper深入-语者分离

文章目录 学习目标&#xff1a;如何使用whisper学习内容一&#xff1a;whisper 转文字1.1 使用whisper.load_model()方法下载&#xff0c;加载1.2 使用实例对文件进行转录1.3 实战 学习内容二&#xff1a;语者分离&#xff08;pyannote.audio&#xff09;pyannote.audio是huggi…

基于ETM+遥感数据的城市热岛效应现状研究的解决方案

1.引言 城市热岛效应&#xff08;Urban Heat Island Effect&#xff09;是指城市中的气温明显高于外围郊区的现象。在近地面温度图上&#xff0c;郊区气温变化很小&#xff0c;而城区则是一个高温区&#xff0c;就像突出海面的岛屿&#xff0c;由于这种岛屿代表高温的城市区域&…

Android ViewPager实现下载当前页面ImageView的Bitmap图片

一 问题背景 经常会有画廊组件需要在当前展示给用户的页面进行下载功能。一般情况下下载按钮的UI曾经是和ViewPager同级的&#xff0c;而不是作为ViewPager中adapter对应的item一部分。 因此知道当前展示给用户的item页面及其bitmap在用户点击下载按钮时的处理&#xff0c;显…

20、清华、杭州医学院等提出:DA-TransUNet,超越TranUNet,深度医学图像分割框架的[皇帝的新装]

前言&#xff1a; 本文由清华电子工程学院、杭州医学院、大阪大学免疫学前沿研究所、日本科学技术高等研究院信息科学学院、东京法政大学计算机与信息科学专业共同作者&#xff0c;于2023年11月14号发表于arXiv的《Electrical Engineering and Systems Science》期刊。 论文&…

MongoDB与大数据处理:构建高性能分布式数据库

MongoDB是一种非关系型数据库&#xff0c;具有高度灵活性和可扩展性。在处理大量数据时&#xff0c;索引的优化是提升查询性能的关键。下面将介绍一些MongoDB索引优化的指南&#xff0c;帮助用户更好地利用索引来提高查询性能。 一、选择适当的索引类型 1、单字段索引&#xf…

15.动态规划:数据结构优化DP

数据结构优化DP有前缀和、滑动窗口、树状数组、线段树、单调栈、单调队列 文章目录 树状数组优化DP[300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/)【值域树状数组】[2926. 平衡子序列的最大和](https://leetcode.cn/problems/maximum-b…

Go项目快速集成Swagger UI

swag Swag将Go的注释转换为Swagger2.0文档。我们为流行的 Go Web Framework 创建了各种插件&#xff0c;这样可以与现有Go项目快速集成&#xff08;使用Swagger UI&#xff09;。 目录 快速开始支持的Web框架如何与Gin集成格式化说明开发现状声明式注释格式 通用API信息API操…

MySQL实战45讲课后问题

1、第一章 如果表T中没有字段k&#xff0c;而你执行了这个语句 select *fromTwhere k1, 那肯定是会报“不存在这个列”的错误&#xff1a; “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢&#xff1f; 解答&#xff1a;…

网线的制作集线器交换机路由器的配置--含思维导图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 一、网线的制作 1、网线的材料有哪些&#xff1f; 网线 网线是一种用于传输数据信号的电缆&#xff0c;广泛应…

学生党评测FreeBuds SE 2,华为最便宜的TWS耳机体验如何?

华为最便宜的百元价位TWS耳机——FreeBuds SE 2值得入手吗&#xff1f;学生党实际使用一个多月&#xff0c;今天从个人主观使用感受来展开说说它的优缺点&#xff0c;如果说你正在观望要不要入手这款耳机&#xff0c;希望可以帮到你。 优点一&#xff1a;超长续航 对于我这种…

JMM的内存可见性保证

Java程序的 内存可见性保证 可以分为下列3类 1&#xff09;单线程程序 单线程程序不会出现内存可见性问题。 编译器、runtime、处理器会共同确保单线程程序的执行结果与该程序在顺序一致性模型中的执行结果相同。 2&#xff09;正确同步的多线程程序 Further Reading &…

YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)

一、本文介绍 本文给大家带来的改进机制是HAttention注意力机制&#xff0c;混合注意力变换器&#xff08;HAT&#xff09;的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要&#xff0c;而自注意力则关注于图…

Redis cluster集群设置密码

Redis cluster集群设置密码 1 备份数据 # 链接redis集群,执行rdb快照 bgsave # 备份dump.rdb文件 cp /data/redis/cluster/dump.rdb /data/redis/cluster/backup/dump.rdb.202312202 设置密码 必须保证每个节点的密码保持一致&#xff0c;不然 Redirected 的时候会失败 2.1…

C : DS二叉排序树之删除

Description 给出一个数据序列&#xff0c;建立二叉排序树&#xff0c;并实现删除功能 对二叉排序树进行中序遍历&#xff0c;可以得到有序的数据序列 Input 第一行输入t&#xff0c;表示有t个数据序列 第二行输入n&#xff0c;表示首个序列包含n个数据 第三行输入n个数据…

Python 元组完全指南 1

元组用于在单个变量中存储多个项目。 mytuple ("apple", "banana", "cherry") 元组是 Python 中的 4 种内置数据类型之一&#xff0c;用于存储数据集合&#xff0c;另外还有列表、集合和字典&#xff0c;它们都具有不同的特性和用途。元组是有…

分布式锁解决方案之数据库乐观锁实现的分布式锁

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 分布式锁解决方案之数据库乐观锁实现的分布式锁 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目…

cpulimit设计理念及其思考

背景 前几天&#xff0c;同事咨询了我一个问题&#xff1a;IO占用能和cpu使用率那样&#xff0c;有方法来控制吗&#xff1f;这个问题的背景是因为客户提了两个需求&#xff0c;如下&#xff1a; 说实话&#xff0c;针对这两点需求&#xff0c;我的第一反应是有一点思路&#…

Linux 下 GCC 编译共享库控制导出函数的方法

通过一些实际项目的开发&#xff0c;发现这样一个现象&#xff0c;在 Windows 下可以通过指定 __declspec(dllexport) 定义来控制 DLL&#xff08;动态链接库&#xff09;中哪些函数可以导出&#xff0c;暴露给其他程序链接使用&#xff0c;哪些函数是 DLL 内部自己使用&#x…

复习linux——ssh服务

SSH服务 ssh&#xff1a;安全的远程登录&#xff0c;实现加密通信&#xff0c;代替传统的telnet协议 具体的软件实现 openssh&#xff1a;ssh协议的开源实现 dropbear&#xff1a;另一个ssh协议的开源项目的实现 ssh公钥交换原理 客户端发起连接请求——客户端得到服务端的公…