python爬虫数据分别存入MySQL、MongoDB、Redis数据的操作

数据存入MySQL数据库

MySQL数据库不同于mongodb和redis,属于关系型数据库,在存入数据之前必须要建表和字段,在海量数据处理的时候效率会显著变慢,也正是因为这点,爬虫的数据一般会选择存入mongodb,但是MySQL数据库支持事务,所以更适合用于建站时使用。

  1. 建立数据库链接
    cursor= pymysql.connect("localhost","root","123456","test",charset="utf8")
    cursor = db.cursor()
  1. 创建字段
sql = """CREATE TABLE EMPLOYER (
            ID INT PRIMARY KEY AUTO_INCREMENT,
            test1	CHAR(255),
            test2	CHAR(20),
            test3	CHAR(255) )"""

cursor.execute(sql)
  1. 写入数据
sql = "INSERT INTO EMPLOYER(LOGO,PRICE,AUTHER) VALUES (%s, %s,  %s)"
cursor.execute(sql,value)
cursor.commit()

MySQL(可视化:Navicat for MySQL)

import pymysql
# 数据库的连接
conn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', password = 'password', db = 'test')
# 创建操作的游标
cursor = conn.cursor()
# 编写sql语句
# 增
sql  = "insert into test_table(name, age, title, content) values('tom',22,'this is title', 'this is content')"
# 删
sql1 = "delete from test_table where id = 4"
# 查(需要fetch)
sql2 = "select * from test_table where id = 2"
# 改
sql3 = "update test_table set name = 'peter' where id = 2"
# 创建数据库
sql4 = "create database if not exists school"
# 删除数据库
sql5 = "drop database if exists school"
# 创建表
sql6 = "create table if not exists Student(Sno char(10)not null,Sname char(10),Ssex char(2),Sage int,Sdept varchar(20)) "
# 删除表
sql7 = "drop table if exists Student"
cursor.execute(sql)
conn.commit()
row = cursor.fetchone()
print(row)

数据存入MongoDB数据库

适量级的内存的 MongoDB 的性能是非常迅速,它将热数据存储在物理内存中,使得热数据的读写变得十分快。文档结构的存储方式,能够更便捷的获取数据: json 的存储格式。缺点就是无事务。

  1. 连接数据库
client = pymongo.MongoClient(host='127.0.0.1',port=27017)
  1. 连接数据库集合

url_list = client['Test']['url_list']
  1. 插入数据

url_info= {
    'id':'00001',
    'url':'baidu.com',
    'table':'百度'
}

result = url_list.insert_one(url_info)

MongoDB(可视化:Studio 3T)

from pymongo import *
# 连接
client = MongoClient(host='localhost', port=27017)
# 选择库
db = client.test
# 选择集合
test_set = db.test
# 增
test_set.insert({"name":"ki", 'age':22})
test_set.insert({"name":"tom", 'age':22})
# 查
for result in test_set.find({'age':22}):
    print(result)
# 删
test_set.remove({'name':'ki'})
# 改
test_set.update({'name':'tom','age':22},{'name':'peter','age':24})

数据存入Redis数据库

它就是一个不折不扣的内存数据库,除了支持 string 类型的value 外还支持string, hash, set, stortset, list 等数据结构.一般用在分布式中作为缓存数据库。

  1. 连接数据库
redis = StrictRedis(host='localhost', port=6379, db=0)
  1. 写入键值对
redis.set('key', 'value')

Redis(可视化:RedisDesktopManager)

import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# String 操作
# 增&改
r.set('name','345')
r.setrange('name',5,'a')
r.mset({"name1":'zhangsan', "name2":'lisi'})
r.setbit('name',6,0)# 二进制修改
r.incr('mont',amount=3)#执行一次自加3
r.decr('mout',amount=3)#执行一次自减3
r.append('name1','haha')#续写
# 查
print(r.get('name'))
print(r.getbit('name',0))
print(r.getrange('name1',0,3))
#删
r.delete('name')

#hash操作
#增&改
r.hset('dic_name','a1','aa')
r.hmset('dic_name',{'a2':'aa','a3':'bb'})
r.hincrby("dic_name","a",amount=2)#自增
#查
print(r.hget('dic_name','a1'))
print(r.hmget('dic_name',['a1','a2']))
print(r.hgetall('dic_name'))
print(r.hlen('dic_name'))
print(r.hexists('dic_name','a1'))
#删
r.hdel('dic_name','a1')

#list操作
#增
r.rpush('list_name',2,3,4,5)
r.lpush('list_name',1)
r.linsert('list_name','BEFORE',1,0)
#改
r.lset('list_name',0,-1)
r.lpop('list_name')
r.rpop('list_name')
r.rpoplpush('list_name','list_name')
#查
print(r.llen("list_name"))  # name对应的list元素的个数
print(r.lindex("list_name",1))  #根据索引获取列表内元素
print(r.lrange("list_name",0,-1))  #分片获取元素
#删
r.lrem("list_name",2,num=0)   #num=2 从前到后,删除2个;num=-2 从后向前,删除2个
r.ltrim("list_name",0,2)  #移除列表内没有在该索引之内的值

#set操作
#增&改
r.sadd('set_name','aa','bb','cc')
r.sadd('set_name1','aa','bb','cc')
r.smove('set_name','set_name1','aa')#移动
#删
r.spop('set_name')
r.srem('set_name1','aa')
#查
print(r.smembers('set_name'))
print(r.scard('set_name'))#元素数量
print(r.sdiff('set_name1','set_name'))#不同
print(r.sinter('set_name','set_name1'))#交集
print(r.sunion('set_name','set_name1'))#并集
print(r.sismember('set_name','aa'))

#有序集合操作
#增&改
r.zadd('zset_name','a1',6,'a2',2,'a3',5)
r.zadd('zset_name',a4=1,a5=2)
r.zincrby('zset_name','a1',amount=2)
#查
print(r.zcard('zset_name'))#元素数量
print(r.zcount('zset_name',1,5))#数值在区间的数量
#按索引取值,desc排序规则,score_cast_func数值处理函数
print(r.zrange("zset_name",0,1,desc=False,withscores=True,score_cast_func=int))
print(r.zscore("zset_name","a1"))
print(r.zrank("zset_name", "a1"))  #获取索引(从0开始)
print(r.zrevrank("zset_name", "a4"))#从大到小排序
#删
r.zrem("zset_name","a2","a5")
r.zremrangebyrank("zset_name", 3, 5)  #根据排行范围删除
r.zremrangebyscore("zset_name", 3, 5) #根据分数范围删除
r.zinterstore("zset_dest",("zset_name1","zset_name2"),aggregate="MAX")#交集放入新集
原创文章 93 获赞 65 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_43870646/article/details/105496800