龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > Python > scrapy使用mysql保存数据

scrapy使用mysql保存数据

龙行    Python    2019-8-25    2884    0评论    
#安装pymysql   pip install pymysql
# 引入pymysql
# 数据库配置在settings.py
# MYSQL_HOST = "127.0.0.1"
# MYSQL_DBNAME = "test"
# MYSQL_USER = "root"
# MYSQL_PASSWORD = "root"
import pymysql
from twisted.enterprise import adbapi
# settings.py item配置
# ITEM_PIPELINES = {
#    # 'cnblog.pipelines.CnblogPipeline': 300,
#    'cnblog.pipelines.MysqlTwistedPipeline': 1,
# }

# 异步进入数据库
class MysqlTwistedPipeline(object):
    def __init__(self, dbpool):
        self.dbpool = dbpool

    @classmethod
    def from_settings(cls, settings):
        # 获取settings文件中的配置
        dbparms=dict(
            host=settings['MYSQL_HOST'],
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            passwd=settings['MYSQL_PASSWORD'],
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor,
            use_unicode=True,
        )

        # 使用Twisted中的adbapi获取数据库连接池对象
        dbpool = adbapi.ConnectionPool("pymysql", **dbparms)

        return cls(dbpool)

    def process_item(self,item, spider):

        # 使用teisted讲mysql插入变成异步执行
        # 使用数据库连接池对象进行数据库操作,自动传递cursor对象到第一个参数
        query = self.dbpool.runInteraction(self.do_insert, item)
        # 设置出错时的回调方法,自动传递出错消息对象failure到第一个参数
        query.addErrback(self.handle_error, item, spider) #处理异常

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

        # 处理异步插入的异常
        print(failure)

    def do_insert(self, cursor, item):

        #执行具体的插入

        insert_sql = """
                insert into te(title, `time`)
                values (%s, %s)
        """
        cursor.execute(insert_sql, (item["title"],  item["time"]))


评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/281.html
  • 上篇文章:scrapy爬取集号吧
  • 下篇文章:Scrapy源码阅读之Scrapy的五大组件
  • python3 scrapy
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部