scrapy连接MySQL

Posted 在白底黑字中读懂自己

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 




以上是关于scrapy连接MySQL的主要内容,如果未能解决你的问题,请参考以下文章

scrapy连接MySQL

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

部分代码片段

Python爬虫之Scrapy框架系列——XXTop250电影所有信息同时存储到MySql数据库

Python爬虫之Scrapy框架系列——XXTop250电影所有信息同时存储到MySql数据库

Scrapy Spider没有返回所有元素