zoukankan      html  css  js  c++  java
  • Scrapy学习-7-数据存储至数据库

    使用MySQL数据库存储
    安装mysql模块包
    pip install mysqlclient
    相关库文件
    sudo apt-get install libmysqlclient-devel
    
    sudo apt-get install python-devel mysql-devel
    阻塞型的数据写入操作
    class MysqlPipeline(object):
    
        def __init__(self):
            self.conn = pymysql.connect('192.168.1.1', 'root', '123456', 'titlespider',
                                        charset='utf-8', use_unicode=True)
            self.cursor = self.conn.cursor()
    
        def process_item(self, item, spider):
            insert_sql = """
                insert into article(title, cteate_time, url, content)
                VALUES (%s, %s, %s, %s)
            """
            self.cursor.execute(insert_sql, (item['title'], item['cteate_time'], item['url'], item['content']))
            self.conn.commit()
            return item
    使用twisted提供的数据库连接池,异步化写入,缓解写数据操作堵塞
    # 首先在settings定义数据库关键字变量
    
        MYSQL_HOST = '192.168.1.1'
        MYSQL_USER = 'root'
        MYSQL_PASSWD = '123456'
        MYSQL_DB = 'articlespider'
    
    # 然后编写Pipeline类
    
        from twisted.enterprise import adbapi
        import pymysql
        import pymysql.cursors      
    
        class MysqlTwistedPipeline(object):
    
            def __init__(self, dbpool):
                self.dbpool = dbpool
    
            @classmethod
            def from_settings(cls, settings):
                conn_dict = dict(
                    host = settings['MYSQL_HOST'],
                    user = settings['MYSQL_USER'],
                    passwd = settings['MYSQL_PASSWD'],
                    database = settings['MYSQL_DB'],
                    charset = 'utf-8',
                    cursorclass = pymysql.cursors.DictCursor,
                    use_unicode = True
                )
                dbpool = adbapi.ConnectionPool('PyMySQL', **conn_dict)
                return cls(dbpool)
    
            def process_item(self, item, spider):
                query = self.dbpool.runInteraction(self.do_insert, item)
                query.addErrorback(self.handle_error)
                return item
    
            def do_insert(self, item):
                insert_sql = """
                            insert into article(title, cteate_time, url, content)
                            VALUES (%s, %s, %s, %s)
                        """
                self.cursor.execute(insert_sql, (item['title'], item['cteate_time'], item['url'], item['content']))
                self.conn.commit()
    
            def handle_error(self, failure):
                print(failure)
    使用类似django-model的方式写入数据库
    https://github.com/scrapy-plugins/scrapy-djangoitem
     
     
  • 相关阅读:
    页面布局方案-上固定,下自适应
    页面布局方案-左右固定,中间自适应
    身心疲惫
    生产计划拆分说明-班组绩效匹配算法
    CSS代码片段
    常见内部函数----Python
    pyramid的第一个项目
    2015年大连国际马拉松半程经历
    高效时间管理
    《番茄工作法图解》第四章读书笔记
  • 原文地址:https://www.cnblogs.com/cq146637/p/9053387.html
Copyright © 2011-2022 走看看