scrapy异步向mysql插入数据

我们采用twisted给我们提供的adbapi下的connectionpool连接池,把插入数据的动作丢进连接池里,这样往数据库插入数据的效率会相对高一点

pipelines.py

import pymysql
from twisted.enterprise import adbapi
from pymysql import cursors
class JianshuTwistedPipeline(object)
	def __init__(self):
		self.dbpool = adbapi.ConnectionPool('pymysql')
		dbparams  = {
		'host':'127.0.0.1',
		'port':3306,
		'user':'root',
		'password':'root',
		'database':'jianshu2',
		'charset':'utf8',
		'cursorclass':cursors.DictCursor
		}
		self.dbpool = adbapi.ConnectionPool('pymysql',**dbparams)
		
	@property
	def sql(self):
		if not self._sql:
			self._sql = ""
				insert into article(id,title,content) values(null,%s,%s)
				"""
			return self._sql
		return self._sql
	
	def process_item(self,item,spider):
		#把sql的插入语句从同步变成异步
		defer = self.dbpool.runInteraction(self.insert_item,item)
		defer.addErrback(self.handle_error,item,spider) #错误处理函数
		
	def insert_item(self,cursor):
		cursor.execute(self.sql,(item['title'],item['content']))
		
	#错误处理函数
	def handle_error(self,error,item,spider):
		print('='*10+'error'+'='*10)
		print(error)
		print('='*10+'error'+'='*10)

settings.py

ITEM_PIPELINSE = {
'jianshu_spider.pipelines.JianshuTwistedPipeline'
}
#项目名.pipelines.pipeline名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值