scrapy 异步存储到mysql

为什么要用异步存储?
因为scrapy下载速度会高于存储速度(个人理解,还在改善中。)

from twisted.enterprise import adbapi
import pymysql

class TwistedMysqlPipeline
	    def __init__(self, pool):
        self.pool = pool

	#@classmethod是声明一个类方法,而平常见到的声明一个实例方法
       # cls代表这个类本身,self是表示该类的一个实例
    @classmethod
    def from_settings(cls, settings):
        parm = dict(
            host=settings['HOST'],
            user=settings['USER'],
            password=settings['PASSWORD'],
            db=settings['DB'],
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor,
        )
        pool = adbapi.ConnectionPool('pymysql', **parm)
        return cls(pool)

    def process_item(self, item, spider):
    	#这一步是执行异步存储
        query = self.pool.runInteraction(self.do_insect, item)
        query.addErrback(self.handle_error, item, spider)


    def do_insect(self, cursors, item):
        sql = """
        insert into tb_info (id, title, genre)
        values (%s, %s, %s)
        """
        cursors.execute(sql, (item['id'], item['title'], item['genre']))

    def handle_error(self, failure, item, spider):
        print(failure)
		


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值