基于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的安装
整理网上信息,留作以后参考。
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)
先看神器的庐山真面目
怎么样?
界面看起来就很酷炫。
目前主要解锁了数据表设计查询等常用的功能。上图一张,展示一下爬取的小说信息:题目看起来就很诱人~
五、小结
某位哲人说过:世界上还是大神多。世界上那么多大神开发出好用的框架和软件,再次献出我的膝盖~
再过一个小时国庆假期就结束了,美好的日子总是那么短暂。。。
——后记