第三百四十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存
第三百四十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存
注意:数据保存的操作都是在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, item, 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 文件的容器函数
- #注意:自定义图片下载器设置好后,需要在
将数据保存到数据库
我们使用一个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:279819@127.0.0.1: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文件
- # -*- 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, item, 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, results, item, 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分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存的更多相关文章
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- 二十一 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存
注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your ite ...
- 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图
- 第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目
第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目 scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:h ...
- 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查
第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...
- 第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter
第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行.scrapy-splash. splinter 1.chrome谷歌浏览器无界面运行 chrome ...
- 第三百四十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用、自动限速、自定义spider的settings,对抗反爬机制
第三百四十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用.自动限速.自定义spider的settings,对抗反爬机制 cookie禁用 就是在Scrapy的配置文件set ...
- 第三百四十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP
第三百四十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP 设置代理ip只需要,自定义一个中间件,重写process_request方法, request ...
- 第三百四十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过downloadmiddleware中间件全局随机更换user-agent浏览器用户代理
第三百四十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过downloadmiddleware随机更换user-agent浏览器用户代理 downloadmiddleware介绍中间件是 ...
随机推荐
- FFmpeg(11)-基于FFmpeg进行音频重采样(swr_init(), swr_convert())
一.包含头文件和库文件 修改CMakeLists # swresample add_library(swresample SHARED IMPORTED) set_target_properties( ...
- linux怎么关闭iptables linux如何关闭防火墙
Linux系统下面自带了防火墙iptables,iptables可以设置很多安全规则.但是如果配置错误很容易导致各种网络问题,那么如果要关闭禁用防火墙怎么操作呢,咗嚛本经验以centos系统为例演示如 ...
- 服务器搭建3 安装libevent2.0.20
1.检测是否安装 安装了的话应该是这样的:如果不是,那就装一下. root@iZ23nyl8frqZ:/home/upload# ls -a /usr/lib |grep libeventlibeve ...
- 【编码】Base64编码
简述 为什么叫Base64?个人理解是,基础的64个字符. 而它的作用?用基础的(可理解为可安全传输的)64个字符,来表示难以表示的二进制或对程序造成干扰的字符. Base64的编码过程 自行编码分析 ...
- crontab入门
参数 crontab是一个处理定时任务的命令,在终端输入man crontab可以得到使用方法提示,主要参数如下: crontab -u # 指定运行的账户,默认为当前账户 crontab -l # ...
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- Android开发(四)——Android中的颜色
Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(layout ...
- [转]javaweb学习总结(二十九)——EL表达式
原文地址:https://www.cnblogs.com/xdp-gacl/p/3938361.html 一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获 ...
- cas单点登录-jdbc认证(三)
前言 本节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理) 认证策略(jdbc) 一.业务需求 不同的公司,需求业务需求或者架构不一样导致我们实现验证的 ...
- 依赖注入(Dependency Injection)
Spring的两个核心内容为控制反转(Ioc)和面向切面(AOP),依赖注入(DI)是控制反转(Ioc)的一种方式. 依赖注入这个词让人望而生畏,现在已经演变成一项复杂的编程技巧 或设计模式理念.但事 ...