爬虫学习使用指南--数据持久化

Auth: 王海飞

Data:2018-06-15

Email:779598160@qq.com

github:https://github.com/coco369/knowledge

1.Redis介绍

Redis是REmote DIctionary Server的缩写,它是一个用ANSI C编写的高性能的key-value存储系统,与其他的key-value存储系统相比,Redis有以下一些特点(也是优点):

  • Redis的读写性能极高,并且有丰富的特性(发布/订阅、事务、通知等)。

  • Redis支持数据的持久化(RDB和AOF两种方式),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供hash、list、set,zset、hyperloglog、geo等数据类型。

  • Redis支持主从复制(实现读写分析)以及哨兵模式(监控master是否宕机并调整配置)。

redis在centos中的安装配置已经上章文章中已经整理好了,如需查看自行跳转过去查看,地址。Redis有着非常丰富的数据类型,也有很多的命令来操作这些数据,具体的内容可以查看Redis命令参考,在这个网站上,除了Redis的命令参考,还有Redis的详细文档,其中包括了通知、事务、主从复制、持久化、哨兵、集群等内容。

1.1 在Python程序中使用Redis

可以使用pip安装redis模块。redis模块的核心是名为Redis的类,该类的对象代表一个Redis客户端,通过该客户端可以向Redis服务器发送命令并获取执行的结果。我们在Redis客户端中使用的命令基本上就是Redis对象可以接收的消息。

首先:安装redis

pip3 install redis
简单案例

该案例:用户在登录的时候,先验证传入的用户名和密码是否在redis中,是否能验证通过,如果不能验证通过的话,就去mysql数据库中验证,如果验证成功则同步redis中用户的信息。

# -*- coding:utf-8 -*-

import sys

import pymysql
import redis

# 访问mysql数据库
def con_mysql(sql):
	db = pymysql.connect(
		host='127.0.0.1',
		user='root', 
		passwd='123456',
		port=3306,
		db='srs',
		charset='utf8')
	cursor = db.cursor()
	cursor.execute(sql)
	data = cursor.fetchall()
	db.close()
	return data

def con_redis()
    r = redis.Redis(host='47.92.164.198', port=6379)
    return r

def excute_redis(r, passwd, name):
    r_name = r.hget('user','name')
    r_passwd = r.hget('user', 'passwd')
    r_name = r_name.decode('utf8')
    r_passwd = r_passwd.decode('utf8')
    if name == r_name and passwd == r_passwd:
    	return True, '登录成功'
    else:
    	return False, '登录失败'

if __name__ == '__main__':
	# 获取传入的姓名和密码参数
	if len(sys.argv):
		name = sys.argv[1]
		passwd = sys.argv[2]
	    # 传入redis中,进行校验
		r = con_redis()
		result = excute_redis(r, passwd, name)
		if not result[0]:
			# 查询mysql数据库
			sql = '''select * from stu where name="%s" and passwd="%s"''' % (name, passwd)
			print(sql)
			data = con_mysql(sql)
			if data:
				r = con_redis()
			    # r = redis.Redis(host='47.92.164.198', port=6379)
			    r.hset('user', 'name', name)
			    r.hset('user', 'passwd', passwd)
			    print('刷新redis,登录成功')
			else:
				print('用户名和密码错误')
		else:
			print('redis中数据正确,登录成功')

2. mongodb介绍

MongoDB是2009年问世的一个面向文档的数据库管理系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。虽然在划分类别的时候后,MongoDB被认为是NoSQL的产品,但是它更像一个介于关系数据库和非关系数据库之间的产品,在非关系数据库中它功能最丰富,最像关系数据库。

MongoDB将数据存储为一个文档,一个文档由一系列的“键值对”组成,其文档类似于JSON对象,但是MongoDB对JSON进行了二进制处理(能够更快的定位key和value),因此其文档的存储格式称为BSON。关于JSON和BSON的差别大家可以看看MongoDB官方网站的文章《JSON and BSON》

目前,MongoDB已经提供了对Windows、MacOS、Linux、Solaris等多个平台的支持,而且也提供了多种开发语言的驱动程序,Python当然是其中之一。

mongodb的安装配置以及语法操作都整理好了,可以自行前往回顾,熟悉语法。

2.1 在python中操作mongodb

通过pip安装pymongo来实现对MongoDB的操作。

pip install pymongo

简单的访问mongo,并打印文档中的信息

from pymongo import MongoClient

client = MongoClient('mongodb://45.76.206.145:27017')
db = client.spider

for student in db.students.find():
    print(student)

书籍推荐