python分布式爬虫及数据存储_二十一 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 文件的容器函数

#注意:自定义图片下载器设置好后,需要在

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

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

相关文章

从头到尾彻底理解傅里叶变换算法(下)

从头到尾彻底理解傅里叶变换算法(上),请看今天第一条。 以下继续: 第三章、复数 复数扩展了我们一般所能理解的数的概念,复数包含了实数和虚数两部分,利用复数的形式可以把由两个变量表示的表达式变成由一个…

ios html 转义字符串,ioS html的转义

标签:iosNSString *htmlString "快乐每一天,还剩365天";NSAttributedString *attributedString [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:{NSDocumentTypeDocumentAttribute…

树莓派安装python3.5_梦见树_周公解梦梦到树是什么意思_做梦梦见树好不好_周公解梦官网...

梦见树是什么意思?做梦梦见树好不好?梦见树有现实的影响和反应,也有梦者的主观想象,请看下面由(周公解梦官网www.zgjm.org)小编帮你整理的梦见树的详细解说吧。树主健康,树笔直挺拔,象征着人的健康。 在梦中…

[Abp 源码分析]后台作业与后台工作者

点击上方蓝字关注我们0. 简介在某些时候我们可能会需要执行后台任务,或者是执行一些周期性的任务。比如说可能每隔 1 个小时要清除某个临时文件夹内的数据,可能用户会要针对某一个用户群来群发一组短信。前面这些就是典型的应用场景,在 Abp 框…

【转】x.509证书在WCF中的应用(CS篇)

【转自】x.509证书在WCF中的应用(CS篇) 为什么要用x.509证书? WCF的服务端和客户端之间&#xff0c;如 果不作任何安全处理(即服务端的<security mode"None">)&#xff0c;则所有传输的消息将以明文方式满天飞&#xff0c;在internet/intranet环境下无疑是很不…

汉字为什么能流传至今_汉字能流传至今,比毛不易还不易,它的同龄字统统都死掉了...

谁是中国历史上最牛逼的发明&#xff1f;造纸术、指南针&#xff1f;火药、活字印刷术&#xff1f;我觉得都不是我心中最牛逼的发明是来&#xff0c;你坐在椅子上闭上眼睛试着想象一下如果从没有过汉字&#xff0c;会怎么样&#xff1f;如果汉字灭绝了&#xff0c;会怎么样&…

从概念到案例:初学者须知的十大机器学习算法

本文先为初学者介绍了必知的十大机器学习&#xff08;ML&#xff09;算法&#xff0c;并且我们通过一些图解和实例生动地解释这些基本机器学习的概念。我们希望本文能为理解机器学习基本算法提供简单易读的入门概念。 机器学习模型 在《哈佛商业评论》发表「数据科学家是 21 世…

api接口怎么用_API接口的使用我这里用java和python都写出来了

实现调用API接口-阿里云大学​edu.aliyun.compythonimport urllib, sys import urllib.request import sslhost https://api01.aliyun.venuscn.com path /ip method GET appcode a661bca174e1458bacaf7a78d489c5f3 querys ip218.18.228.178 bodys {} url host path ?…

未发现android设备,Brother iPrintScan 应用程序上出现错误信息“未发现支持设备”(Android™ 智能手机)。...

相关型号DCP-110C, DCP-115C, DCP-120C, DCP-130C, DCP-145C, DCP-1518, DCP-1519, DCP-155C, DCP-1608, DCP-1619, DCP-165C, DCP-185C, DCP-330C, DCP-350C, DCP-385C, DCP-540CN, DCP-560CN, DCP-7010, DCP-7025, DCP-7030, DCP-7040, DCP-7055, DCP-7057, DCP-7060D, DCP-7…

baseresponse响应类_Java response响应体和文件下载实现原理

通过response 设置响应体&#xff1a;响应体设置文本&#xff1a;PrintWriter getWriter()获得字符流&#xff0c;通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中&#xff0c;随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。关于设…

测试Live Write的插件

1、文字竖排&#xff1a; 删除&#xff0c;只因首页显示时太占空间。2、酷表情&#xff1a;3、Rhapsody SongI am listening to Sad Songs And Waltzes by Cake . Rhapsody.

手把手教你用7行代码实现微信聊天机器人 -- Python wxpy

环境要求&#xff1a; Windows / Linux / Mac OS Python 3.4-3.6&#xff0c;以及 2.7 版本 wxpy安装 ## 使用国内源安装速度快 pip install -U wxpy -i "https://pypi.doubanio.com/simple/" 实例 让机器人与所有好友聊天 from wxpy import * # 实例化&#xff0c;并…

Dapr 已在塔架就位 将发射新一代微服务

微服务是云原生架构的核心&#xff0c;通常使用Kubernetes 来按需管理服务扩展。微软一直走在 Cloud Native Computing Foundation的 最前沿&#xff0c;并通过使用Kubernetes来支持其超大规模Azure和其混合云Azure Stack&#xff0c;微软对云原生的投资一部分来自其工具&#…

python 复制文件_10 行 Python 代码写 1 个 USB 病毒

(给Python开发者加星标&#xff0c;提升Python技能)转自&#xff1a; 知乎-DeepWeaver昨天在上厕所的时候突发奇想&#xff0c;当你把usb插进去的时候&#xff0c;能不能自动执行usb上的程序。查了一下&#xff0c;发现只有windows上可以&#xff0c;具体的大家也可以搜索(搜索…

html5中外描边怎么写,CSS3实现文字描边的2种方法(小结)

问题最近遇到一个需求&#xff0c;需要实现文字的描边效果&#xff0c;如下图解决方法一首先想到去看CSS3有没有什么属性可以实现&#xff0c;后来被我找到了text-stroke该属性是一个复合属性&#xff0c;可以设置文字宽度和文字描边颜色该属性使用很简单&#xff1a;text-stro…

混凝土墙开洞_满城混凝土柱子切割资质齐全

满城混凝土柱子切割资质齐全专业楼板切割开洞&#xff0c;钢筋混凝土墙开门&#xff0c;开窗&#xff0c;开方洞。混泥土承重墙新开门洞、开窗、通风管道开洞、专业开楼梯口&#xff0c;楼梯口加固&#xff0c;地下室开门洞&#xff0c;水泥墙开门加固、楼板加固、砖墙开门开窗…

马云害怕的事还是发生了

当前&#xff0c;余额宝的收益维持在4%左右不能突破&#xff0c;只能用作“钱包”放点零钱了。 放银行或者余额宝收益偏低&#xff0c;股票市场又处于震荡周期&#xff0c;期货市场等不是普通人进得去的&#xff0c;还不如直接买较高收益的互联网理财产品。 比如屡受政策利好…

Unix操作系统***追踪反击战

阅读提示&#xff1a;在Unix系统遭受***后&#xff0c;确定损失及***者的***源地址相当重要。虽然在大多数***者懂得使用曾被他们攻陷的机器作为跳板来***你的服务器可在他们发动正式***前所做的目标信息收集工作&#xff08;试探性扫描&#xff09;常常是从他们的工作机开始的…

python才能做爬虫,No,C#也可以!

介绍网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模…

cmosfixr插件怎么用_3dmax插件神器|怎么用3dmax插件神器去完成背景墙的效果图设计?...

又到3dmax插件神器的小课堂时间了&#xff01;小伙伴们还记得之前几张的知识点吗&#xff1f;如果不记得自己去温习&#xff0c;温故而知新哦&#xff01;如果学会了&#xff0c;下面学习3dmax插件神器小技巧的第四章建模篇的第4.16小节&#xff1a;怎么用3dmax插件神器去完成背…