【0基础学爬虫】爬虫基础之数据存储
字数 1560 2025-08-11 08:36:24

爬虫基础之数据存储:MySQL、MongoDB与Redis详解

概述

在爬虫开发中,数据存储是至关重要的环节。本文将详细介绍三种流行的数据库存储技术:MySQL(关系型数据库)、MongoDB(文档型数据库)和Redis(内存数据库),包括它们的优缺点、适用场景以及Python操作方式。

一、MySQL关系型数据库

1. MySQL简介

MySQL是一种开源的关系型数据库管理系统(RDBMS),特点包括:

  • 使用SQL(结构化查询语言)作为查询和管理语言
  • 支持事务处理,保证数据一致性
  • 具有高度的灵活性和可扩展性
  • 广泛应用于Web开发、数据分析和数据存储领域

2. 安装与配置

  1. 从MySQL官网下载对应版本安装
  2. 安装Python操作MySQL的库:
pip install pymysql

3. SQL基础语法

数据库操作

-- 创建数据库
CREATE DATABASE 数据库名;
-- 查看所有数据库
SHOW DATABASES;
-- 使用数据库
USE 数据库名;
-- 删除数据库
DROP DATABASE 数据库名;

表操作

-- 创建表
CREATE TABLE 表名(
  属性名 数据类型 约束,
  ...
);
-- 查看表结构
DESC 表名;
-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
-- 添加字段
ALTER TABLE 表名 ADD 属性名 数据类型 约束;
-- 删除字段
ALTER TABLE 表名 DROP 属性名;
-- 删除表
DROP TABLE 表名;

常用约束

约束 描述
PRIMARY KEY 主键约束,唯一标识
UNIQUE 唯一约束
NOT NULL 非空约束
FOREIGN KEY 外键约束
AUTO_INCREMENT 自增
DEFAULT 默认值

数据操作

-- 插入数据
INSERT INTO 表名(属性1, 属性2) VALUES(1, 2);
-- 更新数据
UPDATE 表名 SET 属性1=1 WHERE 条件;
-- 删除数据
DELETE FROM 表名 WHERE 条件;
-- 查询数据
SELECT 字段1,字段2 FROM 表名 WHERE 条件;

4. Python操作MySQL

连接数据库

import pymysql

db = pymysql.connect(
    host='localhost',
    user='root',
    database='user',
    password='test123',
    port=3306,
    charset='utf8mb4'
)
cursor = db.cursor()  # 获取操作游标

创建表

sql = 'CREATE TABLE students (id VARCHAR(255) PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL, grade INT)'
cursor.execute(sql)
db.close()

插入数据

sql = 'INSERT INTO students(id, name, age, grade) values ("%(id)s", "%(name)s", %(age)d, %(grade)d)'
try:
    cursor.execute(sql % {'id': '1001', 'name': '张三', 'age': 25, 'grade': 92})
    db.commit()  # 提交事务
except:
    db.rollback()  # 回滚
db.close()

查询数据

sql = "SELECT * FROM students WHERE age > 20"
cursor.execute(sql)
result = cursor.fetchall()  # 获取所有结果
print(result)

二、MongoDB文档型数据库

1. MongoDB简介

MongoDB是非关系型数据库(NoSQL),特点包括:

  • 文档存储格式类似JSON
  • 无固定表结构,适合半结构化数据
  • 高性能,适合处理大规模数据集
  • 不支持事务,不适合需要强一致性的场景

2. 安装与配置

  1. 从MongoDB官网下载安装
  2. 安装Python操作库:
pip install pymongo

3. MongoDB基础命令

// 查看当前数据库
db
// 查看所有数据库
show dbs
// 切换/创建数据库
use 数据库名
// 删除数据库
db.dropDatabase()
// 创建集合(类似表)
db.createCollection('集合名')
// 查看集合
show collections
// 删除集合
db.集合名.drop()

4. Python操作MongoDB

连接数据库

import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')

插入数据

db = client['test']  # 使用test库
students = db['students']  # 创建集合

# 插入单条
data = {'id':'1001','name':'张三','age':20,'gender':'男'}
result = students.insert_one(data)

# 插入多条
result = students.insert_many([
    {'id':'1002','name':'李四','age':22,'gender':'男'},
    {'id':'1003','name':'王五','age':24,'gender':'女'}
])

查询数据

# 查询单条
result = students.find_one({'name':'李四'})

# 查询多条
results = students.find({'gender':'男'})
for r in results:
    print(r)

# 比较查询
students.find({'age':{'$gt':20}})  # 年龄大于20

更新数据

query = {"name":"张三"}
new_values = {"$set": {"age":25}}
result = students.update_many(query, new_values)

删除数据

# 删除单条
students.delete_one({"name": "张三"})

# 删除多条
students.delete_many({"age": {"$gt":22}})

# 删除所有
students.delete_many({})

三、Redis内存数据库

1. Redis简介

Redis是基于内存的键值存储系统,特点包括:

  • 支持多种数据结构:字符串、哈希、列表、集合等
  • 极高性能,适合高速读写和缓存
  • 支持数据持久化
  • 不适合存储大量数据

2. 安装与配置

  1. 安装Redis服务
  2. 安装Python操作库:
pip install redis

3. Redis数据类型

  1. 字符串(string):最基本的数据类型
  2. 哈希(hash):键值对集合
  3. 列表(list):有序字符串列表
  4. 集合(set):无序唯一元素集合
  5. 有序集合(zset):带分数的集合

4. Python操作Redis

连接数据库

from redis import StrictRedis
redis = StrictRedis(host='localhost', port=6379, decode_responses=True)

字符串操作

# 设置值(带过期时间)
redis.set('name', '张三', ex=3)

# 获取值
redis.get('name')

# 批量操作
redis.mset({'key1':'value1', 'key2':'value2'})
redis.mget('key1', 'key2')

哈希操作

# 设置哈希字段
redis.hset('hash1', 'key1', 'value1')

# 获取所有字段
redis.hkeys('hash1')

# 获取字段值
redis.hget('hash1', 'key1')

# 批量操作
redis.hmset('hash2', {'key3':'value3', 'key4':'value4'})
redis.hmget('hash2', 'key3', 'key4')

列表操作

# 左/右插入
redis.lpush('grade', 88, 87, 92)
redis.rpush('grade', 78, 67, 99)

# 获取范围
redis.lrange('grade', 0, -1)

# 修改元素
redis.lset('grade', 0, 77)

# 删除元素
redis.lrem('grade', 87, 1)  # 删除1个87

集合操作

# 添加元素
redis.sadd('count', 88, 87, 92)

# 获取所有元素
redis.smembers('count')

# 集合运算
redis.sdiff('set1', 'set2')  # 差集
redis.sinter('set1', 'set2')  # 交集
redis.sunion('set1', 'set2')  # 并集

有序集合操作

# 添加元素(带分数)
redis.zadd('fruit', {'apple':10, 'banana':6})

# 范围查询
redis.zrange('fruit', 0, -1)  # 升序
redis.zrevrange('fruit', 0, -1)  # 降序

# 获取分数
redis.zscore('fruit', 'apple')

四、数据库对比与选择建议

特性 MySQL MongoDB Redis
类型 关系型 文档型 键值对
查询语言 SQL 类JSON查询 命令
数据结构 文档 多种
事务支持 支持 不支持 有限支持
性能 中等 极高
适用场景 结构化数据、事务 半结构化数据、大数据 缓存、高速读写
数据量 极大

选择建议

  1. 需要强一致性、事务支持:选择MySQL
  2. 处理半结构化、大数据量:选择MongoDB
  3. 需要高速读写、缓存:选择Redis
  4. 复杂场景可考虑组合使用,如MySQL存储核心数据,Redis做缓存,MongoDB存储日志等非结构化数据

五、总结

本文详细介绍了三种数据库的基本原理和Python操作方法。掌握这些数据库技术,能够根据实际需求选择最合适的存储方案,是爬虫开发者必备的技能。建议读者在实际项目中多加练习,深入理解各种数据库的特性和适用场景。

爬虫基础之数据存储:MySQL、MongoDB与Redis详解 概述 在爬虫开发中,数据存储是至关重要的环节。本文将详细介绍三种流行的数据库存储技术:MySQL(关系型数据库)、MongoDB(文档型数据库)和Redis(内存数据库),包括它们的优缺点、适用场景以及Python操作方式。 一、MySQL关系型数据库 1. MySQL简介 MySQL是一种开源的关系型数据库管理系统(RDBMS),特点包括: 使用SQL(结构化查询语言)作为查询和管理语言 支持事务处理,保证数据一致性 具有高度的灵活性和可扩展性 广泛应用于Web开发、数据分析和数据存储领域 2. 安装与配置 从MySQL官网下载对应版本安装 安装Python操作MySQL的库: 3. SQL基础语法 数据库操作 表操作 常用约束 | 约束 | 描述 | |------|------| | PRIMARY KEY | 主键约束,唯一标识 | | UNIQUE | 唯一约束 | | NOT NULL | 非空约束 | | FOREIGN KEY | 外键约束 | | AUTO_ INCREMENT | 自增 | | DEFAULT | 默认值 | 数据操作 4. Python操作MySQL 连接数据库 创建表 插入数据 查询数据 二、MongoDB文档型数据库 1. MongoDB简介 MongoDB是非关系型数据库(NoSQL),特点包括: 文档存储格式类似JSON 无固定表结构,适合半结构化数据 高性能,适合处理大规模数据集 不支持事务,不适合需要强一致性的场景 2. 安装与配置 从MongoDB官网下载安装 安装Python操作库: 3. MongoDB基础命令 4. Python操作MongoDB 连接数据库 插入数据 查询数据 更新数据 删除数据 三、Redis内存数据库 1. Redis简介 Redis是基于内存的键值存储系统,特点包括: 支持多种数据结构:字符串、哈希、列表、集合等 极高性能,适合高速读写和缓存 支持数据持久化 不适合存储大量数据 2. 安装与配置 安装Redis服务 安装Python操作库: 3. Redis数据类型 字符串(string):最基本的数据类型 哈希(hash):键值对集合 列表(list):有序字符串列表 集合(set):无序唯一元素集合 有序集合(zset):带分数的集合 4. Python操作Redis 连接数据库 字符串操作 哈希操作 列表操作 集合操作 有序集合操作 四、数据库对比与选择建议 | 特性 | MySQL | MongoDB | Redis | |------|-------|---------|-------| | 类型 | 关系型 | 文档型 | 键值对 | | 查询语言 | SQL | 类JSON查询 | 命令 | | 数据结构 | 表 | 文档 | 多种 | | 事务支持 | 支持 | 不支持 | 有限支持 | | 性能 | 中等 | 高 | 极高 | | 适用场景 | 结构化数据、事务 | 半结构化数据、大数据 | 缓存、高速读写 | | 数据量 | 大 | 极大 | 小 | 选择建议 : 需要强一致性、事务支持:选择MySQL 处理半结构化、大数据量:选择MongoDB 需要高速读写、缓存:选择Redis 复杂场景可考虑组合使用,如MySQL存储核心数据,Redis做缓存,MongoDB存储日志等非结构化数据 五、总结 本文详细介绍了三种数据库的基本原理和Python操作方法。掌握这些数据库技术,能够根据实际需求选择最合适的存储方案,是爬虫开发者必备的技能。建议读者在实际项目中多加练习,深入理解各种数据库的特性和适用场景。