Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存
发布时间:2020-12-20 10:48:38 所属栏目:Python 来源:网络整理
导读:注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*-# Define your item pipelines here## Don‘t forget to add your pipeline to the ITEM_PIPELINES setting# See: http://doc.scrap
注意:数据保存的操作都是在pipelines.py文件里操作的
将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your item pipelines here # # Don‘t forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html from scrapy.pipelines.images import ImagesPipeline #导入图片下载器模块 import codecs import json class AdcPipeline(object): #定义数据处理类,必须继承object def __init__(self): self.file = codecs.open(‘shuju.json‘,‘w‘,encoding=‘utf-8‘) #初始化时打开json文件 def process_item(self,item,spider): #process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象 # print(‘文章标题是:‘ + item[‘title‘][0]) # print(‘文章缩略图url是:‘ + item[‘img‘][0]) # print(‘文章缩略图保存路径是:‘ + item[‘img_tplj‘]) #接收图片下载器填充的,图片下载后的路径 #将数据保存为json文件 lines = json.dumps(dict(item),ensure_ascii=False) + ‘n‘ #将数据对象转换成json格式 self.file.write(lines) #将json格式数据写入文件 return item def spider_closed(self,spider): #创建一个方法继承spider,spider是一个信号,当前数据操作完成后触发这个方法 self.file.close() #关闭打开文件 class imgPipeline(ImagesPipeline): #自定义一个图片下载内,继承crapy内置的ImagesPipeline图片下载器类 def item_completed(self,results,info): #使用ImagesPipeline类里的item_completed()方法获取到图片下载后的保存路径 for ok,value in results: img_lj = value[‘path‘] #接收图片保存路径 # print(ok) item[‘img_tplj‘] = img_lj #将图片保存路径填充到items.py里的字段里 return item #将item给items.py 文件的容器函数 #注意:自定义图片下载器设置好后,需要在 如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地 将数据保存到数据库 我们使用一个ORM框架sqlalchemy模块,保存数据 数据库操作文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column from sqlalchemy import Integer,String,TIMESTAMP from sqlalchemy import ForeignKey,UniqueConstraint,Index from sqlalchemy.orm import sessionmaker,relationship from sqlalchemy import create_engine #配置数据库引擎信息 ENGINE = create_engine("mysql+pymysql://root:[email?protected]:3306/cshi?charset=utf8",max_overflow=10,echo=True) Base = declarative_base() #创建一个SQLORM基类 class SendMsg(Base): #设计表 __tablename__ = ‘sendmsg‘ id = Column(Integer,primary_key=True,autoincrement=True) title = Column(String(300)) img_tplj = Column(String(300)) def init_db(): Base.metadata.create_all(ENGINE) #向数据库创建指定表 def drop_db(): Base.metadata.drop_all(ENGINE) #向数据库删除指定表 def session(): cls = sessionmaker(bind=ENGINE) #创建sessionmaker类,操作表 return cls() # drop_db() #删除表 # init_db() #创建表 pipelines.py文件 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,784758214 群里有不错的学习视频教程、开发工具与电子书籍。 与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容 # -*- coding: utf-8 -*- # Define your item pipelines here # # Don‘t forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html from scrapy.pipelines.images import ImagesPipeline #导入图片下载器模块 from adc import shujuku as ORM #导入数据库文件 class AdcPipeline(object): #定义数据处理类,必须继承object def __init__(self): ORM.init_db() #创建数据库表 def process_item(self,spider): #process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象 print(‘文章标题是:‘ + item[‘title‘][0]) print(‘文章缩略图url是:‘ + item[‘img‘][0]) print(‘文章缩略图保存路径是:‘ + item[‘img_tplj‘]) #接收图片下载器填充的,图片下载后的路径 mysq = ORM.session() shuju = ORM.SendMsg(title=item[‘title‘][0],img_tplj=item[‘img_tplj‘]) mysq.add(shuju) mysq.commit() return item class imgPipeline(ImagesPipeline): #自定义一个图片下载内,继承crapy内置的ImagesPipeline图片下载器类 def item_completed(self,value in results: img_lj = value[‘path‘] #接收图片保存路径 # print(ok) item[‘img_tplj‘] = img_lj #将图片保存路径填充到items.py里的字段里 return item #将item给items.py 文件的容器函数 #注意:自定义图片下载器设置好后,需要在 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |