十四. 数据库:MySQL篇

MySQL可以登陆账户后安装,也可以单击“No thanks, just start my download.”直接下载,如果安装时提示requires .NET Framework4.0,请网上搜索下载后再继续安装。安装界面时选择“Developer Default”单选按钮,后面直接点Next即可。

  • 2.运行:由于MySQL安装就已经开启了服务,所以MySQL不需要用命令行来启动服务。可以在安装路径bin文件夹下打开cmd,输入以下命令,即可连接数据库。
    mysql -uroot -p123456
    若不设置密码,可以输入:mysql -uroot

查看数据库:show database;
打开某数据库:use XX
查看数据库中的数据表:show tables;

  • 3.第三方库采用mysqlclient
    py -3 -m pip install mysqlclient

  • 4.实现,与sqlite3类似:
    ①创建一个供scrapy使用的数据库,取名为scrapydb,并创建数据表books;
    mysql -uroot
    CREATE DATABASE scrapydb;
    USE scrapydb;

CREATE TABLE books(
upc CHAR(16) NOT NULL PRIMARY KEY,
 name VARCHAR(256) NOT NULL,
 price VARCHAR(16) NOT NULL,
 review_rating INT,
 review_num INT,
 stock INT
)ENGINE INNODB DEFAULT CHARSET=utf8;

②mysql的简单示例可以另外建立一个py文件来运行,与sqlite3几乎相同:

# -*- coding: utf-8 -*-
import pymysql

#连接数据库,得到Connection对象
conn = pymysql.connect(host='localhost',user='root',db='scrapydb',port=3306,charset='utf8')

#创建Cursor对象,用于执行SQL语句
cursor = conn.cursor()

#创建数据表
##cursor.execute("CREATE TABLE person(name VARCHAR(32),age INT,sex char(1)) ENGINE INNODB DEFAULT CHARSET=utf8")

#插入一条数据
cursor.execute('INSERT INTO person VALUES(%s,%s,%s)',('李小龙',23,'M'))

#保存变更,commit后数据才会实际写入数据库
conn.commit()

#关闭连接
conn.close()

③用sqlite3已经建立的项目,在此基础上修改代码,首先是pipelines.py

# 爬取到的数据写入到MySQL数据库
import pymysql

class MysqlPipeline(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', '123456')

        self.db_conn = pymysql.connect(host=host,port=port,db=db,user=user,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):
        values = (
            item['upc'],
            item['name'],
            item['price'],
            item['review_rating'],
            item['review_num'],
            item['stock']
        )

        sql = 'INSERT INTO books VALUES(%s,%s,%s,%s,%s,%s)'
        self.db_cur.execute(sql, values)

④settings.py

MYSQL_DB_NAME = 'scrapydb'
MYSQL_HOST = 'localhost'
MYSQL_USER = 'root'

ITEM_PIPELINES = {
   'books.pipelines.BooksPipeline': 300,
    # 'books.pipelines.SQLitePipeline': 400,
    'books.pipelines.MysqlPipeline': 401,
}

⑤运行cmd命令:scrapy crawl books,用MySQL Workbench显示了1000条结果。

MySQL管理工具也可以使用,直接下载中文版更好用:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容