【Python爬虫】 轻松几步 将 scrapy 框架 获取得到的 数据 存储到 MySQL 数据库中

以下操作 是在 一个 完整的  scrapy 项目中 添加 代码:

        中间件 和 spiders 中的代码 都不需要修改 只需要 做下面两件事就可以将数据保存到数据库了,不过在写代码之前 我们要先: 

  1.    在终端 执行命令:net start mysql57    开启 mysql 服务器 

  2.     创建数据库,在数据库中创建与要保存相关的数据的表(名称要与框架中的名称一样, 表中创建的 字段名称 也要跟 框架中 需要保存字段 名 一致)(利用图形化界面工具创建起来方便些:Navicat Premium)

  3.  创建好数据库和表之后  先测试一下 数据库能否连接成功

'''
测试数据库是否连接成功
'''
import pymysql

conn=pymysql.connect(host='127.0.0.1',port=3306,user='数据库名称',password='数据库密码',db='表名',charset='utf8')
print(conn)

输出结果为:<pymysql.connections.Connection object at 0x000000000220D7B8>
则表示数据库连接成功  如果报错则失败

当数据库连接成功了之后, 接下来 我们就开始在scrappy框架中进  "装修" :

  1:配置环境 在setting文件中加入: sql数据库参数 和 pipelines管道配置:

# 设置管道中类的优先级  
ITEM_PIPELINES = {
'movie.pipelines.MoviePipeline': 300, # 管道中自带的类,优先级默认第一
'movie.pipelines.MovieMysqlPipeline': 200, # 管道中 新建的类 用来保存数据到数据库
}

# 连接数据库
# 填的 是所保存数据库的信息
DB_HOST = '127.0.0.1'
DB_PORT = 3306
DB_USER = '用户名'
DB_PASSWORD = '密码'
# 数据库名称
DB_DB = 'movies'  
DB_CHARSET = 'utf8'

  2 : 管道中 新建一个类 用来保存数据到数据库 :

           (下面代码中 关于数据库的一下东西是博主自己 ,  请自行修改 )

import pymysql
from scrapy.utils.project import get_project_settings

# 保存数据到mysql数据库(数据去重)
class WeimobMysqlPipeline(object):

    def __init__(self):
        setting = get_project_settings()
        self.host = setting.get("DB_HSOT")
        self.port = setting.get("DB_PORT")
        self.user = setting.get("DB_USER")
        self.password = setting.get("DB_PASSWORD")
        self.db = setting.get("DB_DB")
        self.charset = setting.get("DB_CHARSET")
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, db=self.db, charset=self.charset)
        # 创建游标 通过cursor 执行 sql语句
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
            try:
                # 查重处理
                self.cursor.execute('select * from agents where agent = %s and agent_company= %s',(item['agent'], item['agent_company']))
                # 查看是否有重复的数据
                repetition = self.cursor.fetchone()
                #重复
                if repetition:
                    # 打印一下
                    print('数据重复',item['agent'],item['agent_company'])
                else:
                    # 插入数据
                    self.cursor.execute('insert into agents(agent,agent_company) values("%s","%s") '%(item['agent'],item['agent_company']))
                #提交sql语句
                    self.conn.commit()

            except Exception as error:
                print(error)
            return item

    def close_spider(self, spider):
            # 关闭 游标
            self.cursor.close()
            # 关闭 连接
            self.conn.close()

经过一番的 '装修'  现在我们就能把 获取地带的目标数据 存储到 自己的 数据库中了

猜你喜欢

转载自blog.csdn.net/bmx_rikes/article/details/82415124