• scrapy连接MySQL


    Scrapy中连接MySQL所需要做的工作如下:

    1.settings中需要设置的部分

    # 启动管道组件
    ITEM_PIPELINES = {
        'QianChengWuYu.mongoDBPiplelines.MongoDBPipline': 300,
    }
    # mysql的连接参数
    MYSQL_DB_NAME = 'qianchengwuyu'
    MYSQL_HOST = 'localhost'
    MYSQL_USER = ''
    MYSQL_PASSWORD = ''

          (1)其中ITEM_PIPELINES中设置的是QianChengWuyu项目中的管道文件mongoDBPiplelines中的MongoDBPipline类,优先级是300

          (2)其中MYSQL_DB_NAME 为mysql中的数据库,MYSQL_HOST 为指定登录的IP 这里是localhost;

                 以及MYSQL_USER 为数据库用户名,MYSQL_PASSWORD 为数据库用户密码

    2.scrapy中piplines文件如下:

       1)正常插入,导入pymysql模块

    import pymysql
    
    """
    这个类用于scrapy中数据向MYSQL数据库中插入数据
    """
    class QianchengwuyuPipeline(object): def open_spider(self, spider):
            """
            该方法用于创建数据库连接池对象并连接数据库
            """ db
    = spider.settings.get('MYSQL_DB_NAME', 'scrapy_default') host = spider.settings.get('MYSQL_HOST', 'localhost') port = spider.settings.get('MYSQL_PORT', 3306) user = spider.settings.get('MYSQL_USER', 'root') passwd = spider.settings.get('MYSQL_PASSWORD', 'root') self.db_conn = pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset='utf8') self.db_cur = self.db_conn.cursor() def close_spider(self, spider):
            """
            该方法用于数据插入以及关闭数据库
            """ self.db_conn.commit() self.db_conn.close()
    def process_item(self, item, spider): self.insert_db(item) return item def insert_db(self, item):
            """
            sql语句构造方法
            """ values
    =( item['job'], item['company'], item['place'], item['salary'] ) sql = 'INSERT INTO jobs(job,company,place,salary) VALUES(%s,%s,%s,%s)' self.db_cur.execute(sql, values)

           2)异步插入,使用twisted异步插入

    """
    这个类用于scrapy中数据向MYSQL数据库中异步插入数据
    """
    from twisted.enterprise import adbapi
    
    class MySQLsyncPipeline(object):
    
        def open_spider(self, spider):
            """
            该方法用于创建数据库连接池对象并连接数据库
            """
            db = spider.settings.get('MYSQL_DB_NAME', 'scrapy_default')
            host = spider.settings.get('MYSQL_HOST', 'localhost')
            port = spider.settings.get('MYSQL_PORT', 3306)
            user = spider.settings.get('MYSQL_USER', 'root')
            passwd = spider.settings.get('MYSQL_PASSWORD', 'root')
    
            self.dbpool = adbapi.ConnectionPool('pymysql', host=host, db=db, user=user, password=passwd, charset='utf8')
    
        def close_spider(self, spider):
            """
            该方法用于数据插入完成后关闭数据库
            """
            self.dbpool.close()
    
        def process_item(self, item, spider):
            """
            插入数据库方法
            """
            self.dbpool.runInteraction(self.insert_db, item)
    
            return item
    
        def insert_db(self, tx, item):
            """
            sql语句构造方法
            """
            values = (
                item['job'],
                item['company'],
                item['place'],
                item['salary']
            )
    
            sql = 'INSERT INTO jobs(job, company, place,salary) VALUES(%s,%s,%s,%s)'
            tx.execute(sql, values)
  • 相关阅读:
    洛谷 P2713:「罗马游戏」
    洛谷 P4014:「分配问题」
    「洛谷P1433」吃奶酪
    信号的频谱分析,加噪降噪处理
    javascript学习笔记
    IDA学习笔记
    inline内联函数
    api hook学习笔记
    java反射学习笔记
    android基于MBR的bootkit病毒学习笔记
  • 原文地址:https://www.cnblogs.com/llssx/p/9082276.html
Copyright © 2020-2023  润新知