当前位置: 首页 > news >正文

python爬虫之scrapy基于管道持久化存储操作

python爬虫之scrapy基于管道持久化存储操作

本文基于python爬虫之基于终端指令的持久化存储和python爬虫之数据解析操作而写
scrapy持久化存储
基于管道:
编码流程:
1、数据解析
2、在item类中定义相关属性
3、将解析的数据封装存储到item类型的对象
4、在管道类的process_item中要将接受到的item对象中存储的数据进行持久化存储操作
5、在配置文件中开启管道
实际操作:
1、在items.py中定义item类

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass QiushiproItem(scrapy.Item):# define the fields for your item here like:title = scrapy.Field()content = scrapy.Field()# name = scrapy.Field()# pass

2、在qiushi.py中将数据封装到item类中

import scrapy
from qiushiPro.items import QiushiproItemclass QiushiSpider(scrapy.Spider):name = "qiushi"# allowed_domains = ["www.xxx.com"]start_urls = ["https://www.qiushile.com/duanzi/"]# def parse(self, response):#     #解析:段子标题+段子内容#     li_list = response.xpath('//*[@id="ct"]/div[1]/div[2]/ul')#     all_data = []#     for li in li_list:#         #xpath返回的是列表,但是列表元素一定是Selector类型的对象#         #extract可以将Selector对象中data参数存储的字符串提取出来#         # title = li.xpath('./li/div[2]/div[1]/a/text()')[0].extract()#         title = li.xpath('./li/div[2]/div[1]/a/text()').extract_first()#         #列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来#         content = li.xpath('./li/div[2]/div[2]//text()')[0].extract()##         dic = {#             'title':title,#             'content':content#         }#         all_data.append(dic)#         # print(title,content)def parse(self, response):#解析:段子标题+段子内容li_list = response.xpath('//*[@id="ct"]/div[1]/div[2]/ul')all_data = []for li in li_list:#xpath返回的是列表,但是列表元素一定是Selector类型的对象#extract可以将Selector对象中data参数存储的字符串提取出来# title = li.xpath('./li/div[2]/div[1]/a/text()')[0].extract()title = li.xpath('./li/div[2]/div[1]/a/text()').extract_first()#列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来content = li.xpath('./li/div[2]/div[2]//text()')[0].extract()item = QiushiproItem()item['title'] = titleitem['content'] = contentyield item#将item提交给了管道

3、在pipelines.py中的process_item类中进行持久化存储

# 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 ItemAdapterclass QiushiproPipeline:fp = None#重写父类的一个方法:该方法只在开始爬虫的时候被调用一次def open_spider(self,spider):print('开始爬虫……')self.fp = open('./qiushi.txt','w',encoding='utf-8')#专门用来处理item类型对象#该方法可以接收爬虫文件提交过来的item对象#该方法每接收到一个item就会被调用一次def process_item(self, item, spider):title = item['title']content = item['content']self.fp.write(title+':'+content+'\n')return itemdef close_spider(self,spider):print('结束爬虫!')self.fp.close()

4、在settings.py配置文件中取消管道注释,开启管道

ITEM_PIPELINES = {"qiushiPro.pipelines.QiushiproPipeline": 300,#300表示的是优先级,数值越小优先级越高
}

运行:终端输入scrapy crawl qiushi可观察到qiushi.txt文件的生成
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rust入门实战 编写Minecraft启动器#2建立资源模型
  • 初阶C++(二)
  • AI赋能OFFICE 智能化办公利器!
  • Simulink生成代码时端口名称乱码问题
  • ChatGPT-4 对比 ChatGPT-3.5:有哪些优势
  • 有线网络台式电脑打游戏每天要断线几次又自动连接解决
  • LabVIEW从测试曲线中提取特征值
  • 自动化办公004—有效解决ChatGPT数学公式无法复制到Office、MarkDown的问题
  • Apache tika 实现各种文档内容解析
  • 科普文本分类背后的数学原理——最新版《数学之美》第14、15章读书笔记
  • 南方CASS:测绘工作者的得力助手
  • 发表EI会议论文-对考研生和研究生都有好处!
  • Mysql数据库两表连接进行各种操作
  • Python 如何实现数据驱动的接口自动化测试
  • 面壁智能发布端侧 AI 应用开发平台;快手推出肖像动画技术 LivePortrait丨 RTE 开发者日报
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Docker入门(二) - Dockerfile
  • es的写入过程
  • extjs4学习之配置
  • GraphQL学习过程应该是这样的
  • jQuery(一)
  • LeetCode算法系列_0891_子序列宽度之和
  • MobX
  • PermissionScope Swift4 兼容问题
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue中实现单选
  • 排序算法学习笔记
  • 前嗅ForeSpider教程:创建模板
  • 如何选择开源的机器学习框架?
  • 深入浅出webpack学习(1)--核心概念
  • -- 数据结构 顺序表 --Java
  • 微信小程序:实现悬浮返回和分享按钮
  • 《码出高效》学习笔记与书中错误记录
  • 积累各种好的链接
  • ​插件化DPI在商用WIFI中的价值
  • #HarmonyOS:基础语法
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2)MFC+openGL单文档框架glFrame
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (九十四)函数和二维数组
  • (理论篇)httpmoudle和httphandler一览
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (五)Python 垃圾回收机制
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ..回顾17,展望18
  • .NET CF命令行调试器MDbg入门(一)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [AutoSar NVM] 存储架构
  • [bzoj2957]楼房重建
  • [C#]winform部署yolov5-onnx模型
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C++]Leetcode17电话号码的字母组合