基于Scrapy架构的网络爬虫入坑第二战(数据存入MySQL)

第一战中,利用Scrapy架构爬取了58租房信息,存入到json文件中。json文件虽然好用,但是结构化和后续处理方面还存在一定的缺陷。为此,决定使用结构化数据库MySQL

第二战的主要内容是:首先利用Scrapy架构爬取某个小说网站上的小说信息,而后使用MySQLdb将结构化数据存入MySQL,最后利用Navicat Premium访问存储的数据。

惊世三问!!!

问:MySQL是什么

答:由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下数据库关系系统。

问:为什么选择MySQL存储爬虫数据?

答:作为最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

问:怎么使用MySQL?

MySQL将数据保存在不同的表,使用的 SQL 语言是用于访问数据库的最常用标准化语言。

一、MySQL的安装

整理网上信息,留作以后参考。

Step1访问https://dev.mysql.com/downloads/mysql/,获取最新版的MySQL安装包;

 Step2将文件解压到某个目录下;

 Step3在解压文件下创建my.ini配置文件

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 

[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\web\mysql-8.0.11
# 设置mysql数据库的数据的存放目录
datadir=C:\web\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

 Step4进入/bin文件夹下,而后运行cmd命令

mysqld --initialize --console

mysqld install

二、MySQLdb的安装

MySQLdb是一款较为底层的,python连接mysql用的模块。主要聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式是执行SQL语句。

MySQLdb可以直接通过pip install MySQL-python完成。

三、爬取数据

具体过程与第一战类似,主要是修改pipelines文件,将数据同时输出到数据库中。

修改后的pipelines文件如下所示:

import pymysql
import pymysql.cursors
import json
import logging
class BooksPipeline(object):
    def __init__(self):
        self.file = open('books.json', mode='w', encoding='utf-8')
        self.mysqlcli = pymysql.connect(host = "localhost",port = 3306,user = "root",passwd = "123456",db = "pythonlearn",charset = "utf8")
        self.offset = 0       
        #
创建游标对象
        self.cursor = self.mysqlcli.cursor()
        print("MySQL数据库连接成功")      
#         rediscli = redis.Redis(host = "localhost",port = 6379,db = 0)
#         print("Redis数据库连接成功")
    def process_item(self, item, spider):
        jsondata = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(jsondata)
        self.offset += 1
        try:
            # 查重处理
            self.cursor.execute(
                "select * from booksname where booksname.title = %s",
                item['title'])
            # 是否有重复数据 fetchone返回查询的结果
            repetition = self.cursor.fetchone()

            # 重复
            if repetition:
                pass    
            else:
                self.cursor.execute("insert into booksname (title,size,date_time,author,download_times,download_url,img_url,category_namme) values (%s,%s,%s,%s,%s,%s,%s,%s)",(item['title'],item['size'],item['date_time'],item['author'],item['download_times'],item['download_url'],item['img_url'],item['category_namme']))
            # 提交sql语句
            self.mysqlcli.commit() 
            
        except Exception as error:
            # 出现错误时打印错误日志
            logging.error(error)
        return item

    def close_spider(self, spider):
        self.file.close()
        self.cursor.close()

四、MySQL数据的可视化

其实,到上一步为止,工作已经完成。从网上爬取得数据可以在cmd窗口查看(只是界面和操作很不友好。。。)

偶然间发现一个名叫Navicat的神器,决定毫不犹豫地安利一把。

Navicat是一款具有多种强大功能的数据库管理工具,可以登陆数据库,设计数据表,进行删除、清空等SQL语句操作。最强大的是支持MySQL、SQLite、Oracle 及 PostgreSQL 等多种类型的数据库管理。这里推荐一个注册机(DeltaFoX

先看神器的庐山真面目

怎么样?

界面看起来就很酷炫。

目前主要解锁了数据表设计查询等常用的功能。上图一张,展示一下爬取的小说信息:题目看起来就很诱人~

五、小结

某位哲人说过:世界上还是大神多。世界上那么多大神开发出好用的框架和软件,再次献出我的膝盖~

 

再过一个小时国庆假期就结束了,美好的日子总是那么短暂。。。

                            ——后记

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值