Scrapy用Twisted异步操作Mysql

1首先在setting中配置好数据库的信息,便于修改管理

MYSQL_HOST='192.168.0.2'#主机
MYSQL_DBNAME='dbname'#数据库名称
MYSQL_USER='root'#用户名
MYSQL_PASSWORD='jian'#密码

在pipelines.py中

# Twisted只是提供一个异步容器,本身没提供数据库链接
class MysqlTwistedPipeline(object):
    def __init__(self,dbpool):
        self.dbpool = dbpool
    #从配置中获取信息
    @classmethod
    def from_settings(cls, settings):
        dbparms = dict(
            host=settings["MYSQL_HOST"],
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            passwd=settings['MYSQL_PASSWORD'],
            charset='utf8',
            cursorclass=MySQLdb.cursors.DictCursor,
            use_unicode=True
        )
        dbpool = adbapi.ConnectionPool("MySQLdb", **dbparms)
        return cls(dbpool)

    def process_item(self, item, spider):
        #使用twisted将mysql插入编程异步执行
        #第一个参数是我们定义的函数
        query = self.dbpool.runInteraction(self.do_insert,item)
        #错误处理
        query.addErrorback(self.handle_error)

    #错误处理函数
    def handle_error(self,falure):
        print(falure)

    def do_insert(self,cursor,item):
        #执行具体的插入
        insert_sql = """
                    insert into jobbole_article(title,create_date,url,url_object_id,front_image_url
                    ,comment_nums,fav_nums,praise_nums,content)
                    VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)
                    """
        cursor.execute(insert_sql, (item['title'], item['create_date'], item['url'], item['url_object_id']
                                         , item['front_image_url'], item['comment_nums']
                                         , item['fav_nums'], item['praise_nums'], item["content"]))


最后一定要在setting中配置

#注,这个方法默认是被注释掉的
ITEM_PIPELINES = {
    'AticleSpider.pipelines.MysqlTwistedPipeline': 1,
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值