mysql异步写入数据库_scrapy爬虫框架中数据库(mysql)的异步写入

####数据库的异步写入

scrapy爬虫框架里数据库的异步写入与同步写入在代码上的区别也就在pipelines.py文件和settings.py问价的区别,其他的都是一样的。本文就介绍一下pipelines.py和settings.py文件里面是如何配置的。

1、先到settings.py文件里面配置数据库的相关字段

1eb4edafe72ae7158f5327ada1ebf72d.png

2、先在pipelines.py文件里面导入相关模块

import pymysql

from scrapy.pipelines.images import ImagesPipeline

# twisted: 用于异步写入(包含数据库)的框架,cursor.execute()是同步写入

from twisted.enterprise import adbapi

3、数据库写入部分代码如下:

要在from_settings这个类方法里面写上加载配置数据的代码

然后创建一个数据库连接池对象,里面可以包含多个connect连接对象

class MySQLTwistedPipeline(object):

def __init__(self, pool):

self.dbpool = pool

@classmethod

def from_settings(cls, settings):

"""

这个函数名称是固定的,当爬虫启动的时候,scrapy会自动调用这些函数,加载配置数据。

:param settings:

:return:

"""

params = dict(

host=settings['MYSQL_HOST'],

port=settings['MYSQL_PORT'],

db=settings['MYSQL_DB'],

user=settings['MYSQL_USER'],

passwd=settings['MYSQL_PASSWD'],

charset=settings['MYSQL_CHARSET'],

cursorclass=pymysql.cursors.DictCursor

)

# 创建一个数据库连接池对象,这个连接池中可以包含多个connect连接对象。

# 参数1:操作数据库的包名

# 参数2:链接数据库的参数

db_connect_pool = adbapi.ConnectionPool('pymysql', **params)

# 初始化这个类的对象

obj = cls(db_connect_pool)

return obj

def process_item(self, item, spider):

"""

在连接池中,开始执行数据的多线程写入操作。

:param item:

:param spider:

:return:

"""

# 参数1:在线程中被执行的sql语句

# 参数2:要保存的数据

result = self.dbpool.runInteraction(self.insert, item)

# 给result绑定一个回调函数,用于监听错误信息

result.addErrback(self.error)

def error(self, reason):

print('--------', reason)

# 线面这两步分别是数据库的插入语句,以及执行插入语句。这里把插入的数据和sql语句分开写了,跟何在一起写效果是一样的

def insert(self, cursor, item):

insert_sql = "INSERT INTO bole(bole_title, bole_date, bole_tag, bole_content, bole_dz, bole_sc, bole_pl, bole_img_src) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"

cursor.execute(insert_sql, (item['bole_title'], item['bole_date'], item['bole_tag'], item['bole_content'], item['bole_dz'], item['bole_sc'], item['bole_pl'], item['bole_img_path']))

# 不需要commit()

4、也就是最后一步了,在settings.py文件里面,先将系统默认的同步写入的方式给注释了,然后再写入自己自定义的异步写入方式,不然pipeline.py文件里面写的异步写入就执行不了了

756b9ba6f117eaccc62cd4435441e269.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值