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

Scrapy基础(十)———同步机制将Item中的数据写在Mysql


  前面讲解到将Item中的所有字段都已经填写完成,那么接下来就是将他们存储到mysql数据库中,
那就用到了pipeline项目管道了;
  对项目管道的理解:做一个比喻,爬取好比是开采石油,Item装的都是原油,需要通过一系列的管道
和工艺进行提炼,而这些原油都是通过pipeline进行加工的,才能真正的到我们所能使用的油(数据)
  大致思路:
      1, 安装MySQLdb和连接数据库的驱动mysqlclient,并创建数据库和相应的表,创建和Item的字段
        一样的字段(注意各个字段的类型,长度和默认值);这些操作可通过navicat进行操作
      2,自定义pipeline,引入mysqldb库,将Item中的数据写入数据库
      3,在settings文件中注册这个管道,并给这个管道一个编号(这个管道在哪条工艺之后进行)

具体代码

 1 #引入操作数据库模块
 2 import MySQLdb
 3 
 4 class MysqlPipeline(object):
 5     '''
 6     同步机制实现mysql写入操作
 7     '''
 8 
 9     #定义初始化函数,当类被使用时自动调用这个函数,我们让他初始化时就连接上数据库
10     def __init__(self):
11         #取个变量名,连接数据库,依次是: host,user,password,dbname
12         self.conn = MySQLdb.connect("127.0.0.1","root","root","artical_spider")
13         #通过cursor()的方法获取游标
14         self.cursor = self.conn.cursor()
15 
16     #自定义的管道必须有此方法
17     def process_item(self,item,spider):
18         #要执行的插入sql语句
19         insert_sql = """
20             insert into jobbole_artical(title,creat_date,url,url_object_id,
21                 front_image_url2,front_image_path,tags,comment_num,
22                 fav_num,like_num,content
23                 )
24             VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
25         """
26         
27         #执行sql语句,注意后面是元组,将Item中的数据格式化填充到插入语句中
28         self.cursor.execute(insert_sql,(item["title"],item["creat_date"],item["url"],
29             item["url_object_id"],item["front_image_url2"],item["front_image_path"],
30             item["tags"],item["comment_num"],item["fav_num"],item["like_num"],item["content"]))
31 
32         #将sql语句提交到数据库执行
33         self.conn.commint()

注意:

一:

我们从前设置过

artical_item["front_image_url"] = [front_image_url]

这个Item是一个列表类型,当你写入数据库时候报错, 

File "C:\Users\Administrator\Envs\artical_spider\lib\site-packages\MySQLdb\converters.py", line 90, in quote_tuple
    return "(%s)" % (','.join(escape_sequence(t, d)))
TypeError: sequence item 0: expected str instance, bytes found

当我们改为str时图片的下载路径又不能正常工作,

所以只能添加一个新的一样的Item,一个设置为列表,供图片下载,一个为写入数据库中做准备

二:

对于数据库各个字段的设置,这里可将一些字段设置为不为空,并且设置一些字段的默认值;

这里讲url_object_id设置成主键,主键不能为空且唯一;在

在写入数据库时,各个字段要和Item字段的顺序相对应

三:

关于python对数据库的操作,本篇参考了这篇博文

以下是运行结果

 






































'''

转载于:https://www.cnblogs.com/ruoniao/p/6900588.html

相关文章:

  • ucore操作系统实验笔记 - 重新理解中断
  • 评论发布信息可插入QQ表情
  • 数据中心操作人员:艰难地在针对VM构建的基础设施上运行容器
  • Event 营销热点日历
  • 使用SuperSocket快速建立Socket服务
  • JSON中JObject和JArray的修改
  • 思维的框架
  • 《数据分析实战 基于EXCEL和SPSS系列工具的实践》一3.3 耗时耗力的数据整理过程...
  • eclipse+tomcat配置远程debug调整
  • myeclipse 10 j安装了JDK1.7,java编译器无法选择到1.7的问题
  • JAVA注解引发的思考
  • 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
  • pageoffice相关问题整理
  • less学习笔记三
  • Dwg,png,jpg,Dxf格式转换
  • [译]Python中的类属性与实例属性的区别
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS盒模型深入
  • markdown编辑器简评
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • ViewService——一种保证客户端与服务端同步的方法
  • vue-loader 源码解析系列之 selector
  • 大快搜索数据爬虫技术实例安装教学篇
  • 将 Measurements 和 Units 应用到物理学
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 来,膜拜下android roadmap,强大的执行力
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 入门到放弃node系列之Hello Word篇
  • 深度学习在携程攻略社区的应用
  • 使用putty远程连接linux
  • 一道面试题引发的“血案”
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (06)金属布线——为半导体注入生命的连接
  • (31)对象的克隆
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (ZT)薛涌:谈贫说富
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (九)One-Wire总线-DS18B20
  • (六)激光线扫描-三维重建
  • (四)汇编语言——简单程序
  • (五)网络优化与超参数选择--九五小庞
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ***监测系统的构建(chkrootkit )
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net的socket示例
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @在php中起什么作用?