Scrapy存入MySQL或是其他数据库,虽然scrapy没有给我们提供拿来就用的类,但是她已经给我们实现了部分方法,我们继承它给我们实现的方法就能轻松的把数据存入你想存入的数据库,那我们要肿么继承呢?其实就是编写一个pipeline组件,我们需要实现一个pipeline,实现了之后,我们蜘蛛爬取的数据(也就是item定义的内容),通过yield便提交给了pipeline,然后在pipeline里面就可以实现数据的:去重、存储。名义上这里是说scrapy数据存储到mysql,但其实关键是介绍pipeline的编写方式,也就是学习我们要怎么在设置里设置pipeline、怎样在pipeline里面继承scrapy给我们提供的关于pipeline的方法、怎样创建对数据库的连接,好了,接下来我们一一来看!

一、继承pipeline必要方法:

如果我们要编写一个pipeline组件,如:MySQLPipline(命名随意,根据这个类的具体功能来即可),我们必须实现这个方法:

process_item(self, item, spider)

这个方法有两个参数,一个是item,一个是spider。spider就是爬取数据的蜘蛛,item就是爬取到的数据,执行完数据库插入之后,需要执行返回,也就是需要:return item。以上方法是必须要实现的方法,无论你是插入mysql、mongodb还是其他数据库,都必须实现这么一个方法;另外除了这么一个方法,scrapy还提供了另外两个:

open_spider(self, spider)

close_spider(self, spider)

可以看到,上面两个方法一个是蜘蛛打开的时候执行的,一个是关闭的时候执行的,上面的方法根据自己的需要,按需实现,并非必须方法!

二、MySQLPipline类具体实现 细节:

其实说白了这个类就是python操作mysql的类,因此必须引入python操作mysql驱动。引入之前需要确保mysql驱动正确安装,因为python3.4以下和python3.5以上驱动安装方式各有千秋,经常会遇到坑,如果你不能正确安装请查看:《Python Mysql驱动安装及填坑教程》,这里我们为python3.6因此引入方式为:

import pymysql.cursors

如果你是python3.4以下,你可能是需要这样引入:

import MySQLdb

引入之后,就可以编写具体的类了,首先我们需要创建数据库的连接,创建数据库连接之前,需要确保你已经成功安装了MySQL并且已经在MySQL里面创建好了表、字段,并且MySQL已经启动,很多小伙伴问我们,为神马一模一样的代码,就是执行错误呢?我们排查了许久也才发现,连数据库都木有,这叫我们情何以堪!

如果你还不知道如何快速安装数据库,可以查看:《Mysql快速无坑安装》,如果你已经装好,不知道如何可视化管理(创建、删除:表、字段)MySQL,可参看:《Navicat使用详解》。完成以上步骤,我们来创建数据库连接:

def __init__(self):

# 连接数据库

self.connect = pymysql.connect(

host='127.0.0.1',#数据库地址

port=3306,# 数据库端口

db='scrapyMysql', # 数据库名

user = 'root', # 数据库用户名

passwd='root', # 数据库密码

charset='utf8', # 编码方式

use_unicode=True)

# 通过cursor执行增删查改

self.cursor = self.connect.cursor();

经过上面步骤,只要类一初始化,那我们就已经练好了数据库!那接下来我们就需要实现scrapy给我们提供的方法:process_item(self, item, spider)进行数据的存储,看一下具体实现:

def process_item(self, item, spider):

self.cursor.execute(

"""insert into chuanke(name, type, view, price ,teacher, url)

value (%s, %s, %s, %s, %s, %s)""",#纯属python操作mysql知识,不熟悉请恶补

(item['name'],# item里面定义的字段和表字段对应

item['type'],

item['view'],

item['price'],

item['teacher'],

item['url']))

# 提交sql语句

self.connect.commit()

return item#必须实现返回

经过这么一个步骤,数据就实现了MySQL的入库,当然如果你要查重也可以在上面方法实现,后面我们慢慢介绍!

三、settings.py启用MySQLPipline

经过上面步骤,你会发现,运行蜘蛛之后还是无法存入数据库,这里需要我们在settings.py里面开启MySQLPipline,如下:

ITEM_PIPELINES = {

'scrapyMysql.MySQLPipeline.MySQLPipeline': 1,

#格式为:'项目名.文件名.类名':优先级(越小越大)

}

四、MySQLPipline.py具体实现

import pymysql.cursors

import logging

class MySQLPipeline(object):

def __init__(self):

# 连接数据库

self.connect = pymysql.connect(

host='127.0.0.1', # 数据库地址

port=3306, # 数据库端口

db='scrapyMysql', # 数据库名

user='root', # 数据库用户名

passwd='root', # 数据库密码

charset='utf8', # 编码方式

use_unicode=True)

# 通过cursor执行增删查改

self.cursor = self.connect.cursor();

def process_item(self, item, spider):

self.cursor.execute(

"""insert into chuanke(name, type, view, price ,teacher, url)

value (%s, %s, %s, %s, %s, %s)""", # 纯属python操作mysql知识,不熟悉请恶补

(item['name'], # item里面定义的字段和表字段对应

item['type'],

item['view'],

item['price'],

item['teacher'],

item['url']))

# 提交sql语句

self.connect.commit()

return item # 必须实现返回

下一篇,我们将提供一个完整的实例,把以上知识串起来,通过scrapy把数据存入mysql!

评论去哪里了?

由于搜狐畅言广告越来越丧心病狂,用它一个评论,半个网页都被它占领,感觉已经把灵魂出卖给了魔鬼!SO,为了息众怒小编只能暂且关闭评论,若您实在想找我说话,欢迎关注公众号,给我留言,么么哒!

scrapy链接mysql_Scrapy存入MySQL(四):scrapy item pipeline组件实现细节相关推荐

  1. scrapy爬虫数据存入mysql数据库

    上篇博客使用scrapy框架爬取豆瓣电影top250信息将各种信息通过json存在文件中,不过对数据的进一步使用显然放在数据库中更加方便,这里将数据存入mysql数据库以便以后利用. 运行环境: 1. ...

  2. scrapy mysql数据库_Python3学习系列(十三):Scrapy将数据存入Mysql数据库

    前言: 下面给大家介绍将下载的数据存入到Mysql数据库的用法,数据来源是Mooc的课程. 代码实现: items.py from scrapy import Item,Field class Moo ...

  3. 玩转 Scrapy 框架 (一):Item Pipeline 的使用

    目录 一.核心方法 二.实战:获取图片(仅学习使用) 2.1 简单分析 2.2 编码 三.总结 Item Pipeline 即项目管道,调用发生在 Spider 产生 Item 之后,当 Spider ...

  4. python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...

    原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...

  5. scrapy爬虫之item pipeline保存数据

    ##简介 前面的博文我们都是使用"-o ***.josn"参数将提取的item数据输出到json文件,若不加此参数提取到的数据则不会输出.其实当Item在Spider中被收集之后, ...

  6. python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 1. Spider Middleware Spider Middleware是介入到Scrapy的Spid ...

  7. 第45讲:哪都能存,Item Pipeline 的用法

    在前面的示例中我们已经了解了 Item Pipeline 项目管道的基本概念,本节课我们就深入详细讲解它的用法. 首先我们看看 Item Pipeline 在 Scrapy 中的架构,如图所示. 图中 ...

  8. 如何用item pipeline(管道)清洗数据

    管道是什么 Item管道(Item Pipeline): 主要负责处理有蜘蛛从网页中抽取的Item,主要任务是清洗.验证和存储数据. 当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处 ...

  9. Python:Item Pipeline

    当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline都是实现了简单方法的Pyth ...

最新文章

  1. 简洁版本 STP/RSTP/MSTP的区别以及各自的特点
  2. 画布canvas标签,并且在画布上画简单的形状
  3. MPB:西农焦硕组-微生物生物地理学研究方法
  4. 阿里P8连肝一周整理出这份python自动化测试实战PDF
  5. 【D3.js 学习总结】26、D3地理地图
  6. r语言x%3c-读取文件,R语言读写最灵活的文件——txt文件
  7. Spring MVC 原理探秘 - 容器的创建过程
  8. 【转载】请问Silverlight 获取客户端网卡mac码
  9. Ubuntu查看系统任务管理器(cpu+内存资源占用)+查看虚拟机分配核心数
  10. 在生成.net core 3.0程序时不包含nuget库
  11. Linux内存管理:MMU那些事儿
  12. Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式
  13. http.client.ResponseNotReady: Request-sent
  14. 某盘视频网页播放视频修改播放速度代码
  15. 自适应各终端懒人泽客导航源码v2.6 无后门
  16. GPS设备采集的原始GPS坐标转换成百度坐标
  17. 【转】js 判断今天日期是否超过指定日期
  18. 自媒体平台做网赚不要指望着,平台广告分成!
  19. Temporal Pyramid Network for Action Recognition(CVPR2020)
  20. 分布式下载方式(二)DHT分布式网络

热门文章

  1. Kaggle: Jigsaw Multilingual Toxic Comment Classification Top Solutions 金牌思路总结
  2. Centos7搭建SpringBlade的前端Saber
  3. Internet共享打印机
  4. 主要的数据仓库开发软件及软件功能比较
  5. 程序人生--2010年(60)
  6. 590. N-ary Tree Postorder Traversal*
  7. JAVA企业面试题精选 JDBC 1-10
  8. 中国传媒大学计算机与网络安全学院研究生,林卫国 - 中国传媒大学 - 计算机与网络空间安全学院...
  9. windows系统下安装jira
  10. New UI-Hierarchy Viewer工具解析app的界面布局