前面几章,我们实现了数据的爬取,但是并未实现数据的存储。我们可以将爬取到的数据存储于CSV或者txt文件中,既简单又实用,适合存储少量、结构简单的数据。对于数据量大、结构较复杂,需要频繁操作数据的情况下,就需要考虑实用数据库持久化数据了。本章主要实现使用数据库存储通过网络爬虫爬取到的数据,包括:
-
数据存储于文件中
使用Python的文件操作函数,实现将数据存储于csv或txt等文件中。 -
MySQL数据库的使用
简单介绍MySQL数据库的特点、安装、环境配置以及Python调用MySQL操作数据库的方法。 -
MongoDB数据库的使用
简单介绍MongoDB数据库的特点、安装、环境配置以及Python调用MongoDB操作数据库的方法。 -
Mon Redis数据库的使用
简单介绍Redis数据库的特点、安装、环境配置以及Python调用Redis操作数据库的方法。
本章的学习路径如下:
1、数据保存于文件中
保存数据最简单的方法就是使用Python的文件操作函数,将数据保存于csv、txt等文件中,Python的文件操作函数主要有: -
q open():打开文件
-
q write():写入文件
-
q close():关闭文件
当配合with一起使用时,我们无需关心文件关闭问题,系统自动关闭,如:with open(“douban.csv”) as f:下面通过视频来实现将豆瓣电影TOP250的数据保存于csv文件中。
//在python中新建文件,xpath_mysql.py 定义一个保存到数据库的函数
def saveToMysql():
#连接数据库服务器
db=Mysqldb.connect("主机","用户名","密码","数据库的名称",charset="utf8")
#使用cursor()来获取游标操作数据
cursor=db.cursor()
for one in allMovieList():
#SQL语句插入
sql="insert into movies(name,star,numm1) values('%s','%f','%d')"%(one[0],float(one[1],int one[2]))
try:
#执行sql语句
cursor.execute(sql)执行
db.commit()
expect:
db.rollback() #遇到错误就回滚
db.close() #此处断开
MYSQL数据库总结:
- MySQL数据库下载:https://dev.mysql.com/downloads/windows/installer。推荐MSI格式文件下载。
- Navicat数据库可视化工具:百度搜索下载。
- 安装Python访问MySQL的第三方库:mysqlclient
- Python操作数据库基本方法:
- q connect( ):连接数据库服务器
- q execute( ):执行SQL语句
- q commit( ):提交到数据库
- q rollback( ):回滚
- q close( ):关闭数据库服务器
MongoDB是一个面向文档存储的非关系型数据库,是用C++编写的。MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成,类似于JSON对象。MongoDB中的术语与SQL的表述有一些不同,下表中列出了SQL与MongoDB对应的术语。
Redis介绍
Redis全称REmote DIctionary Server。是一个由Salvatore Sanfilippo写的数据存储系统。
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- q Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- q Redis支持数据的备份,即master-slave模式的数据备份。
Redis的优势有
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- q 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- q 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- q 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等。
import redis
//写一个关于保存到redis的函数
def svaeToRedis():
#连接redis数据库,得到一个连接对象
db_com=redis.StrictRedis(host="localhost",port=6379,db=1)#默认的
#设置一个编号
for one in allMoviesList:
item={"name":one[0],"start":one[1],"num":one[2]}
#批量设置键值对
db_conn.hmset("movie-%d"%item_index,item)
#关闭数据库
db_conn.connection-pool.disconnect()
item_index t=1
Python操作数据库基本方法:
- StrictRedis ( ):连接数据库服务器。
- q hmset ( ):批量插入键值对。
- q disconnect ( ):关闭数据库服务器的连接。
本章主要介绍了Python操作MySQL、MongoDB和Redis三种数据库,实现了将爬虫爬取到的数据持久化保存到数据库中,这仅仅是三大数据库的基本用法,如果想更深入地学习这些数据库,可以参考以下网站:
Mongodb菜鸟教程:http://www.runoob.com/mongodb/mongodb-tutorial.html。Redis菜鸟教程:http://www.runoob.com/redis/redis-tutorial.html。
MySql菜鸟教程:http://www.runoob.com/mysql/mysql-tutorial.html。