美文网首页【原创】Python网络爬虫
Python爬虫-数据存储学习笔记之MongoDB操作

Python爬虫-数据存储学习笔记之MongoDB操作

作者: 复苏的兵马俑 | 来源:发表于2020-04-14 12:40 被阅读0次

    1、MongoDB描述

       MongoDB是一个基于分布式文件存储的NoSQL数据库,在处理海量数据的时候会比MySQL更有优势,爬虫如果上了一个量级,可能就会比较推荐使用MongoDB,当然没有上量的数据也完全可以使用MongoDB来存储数据,因此学会MongoDB也是爬虫工程师必须掌握的一个技能。
       MongoDB官方文档:http://www.mongoing.com/docs/

    1)文档

       A)MongoDB是一个面向文档的数据库;
       B)举例:{“foo”:3, “greeting”:“Hello,world!”};
       C)区分大小写,且key唯一,不可重复,文档可嵌套。

    2)集合

       集合就是一组文档,文档类似于关系型数据库里的行,集合类似于关系型数据库里的表,集合中的文档无需固定额结构(与关系型数据库的区别)。

    3)集合的命名

       A)不能有空字符串(" ");
       B)不能包含\0字符(空字符);
       C)不能使用system.的前缀(系统保留);
       D)建议不包含保留字 "$";
       E)用 . 分割不懂命名空间的子集合(如:blog.users, blog.posts)。

    4)数据库

       A)多个文档组成集合,多个集合组成数据库;
       B)一个实例可以承载多个数据库;
       C)每个数据库都有独立的权限;
       D)保留的数据名称(admin,local,config)。

    2、安装MongoDB

       从官网下载mis安装包,安装在根目录下MongoDB文件夹里就OK,例如:D:\MongoDB\Server\4.2

    3、启动MongoDB

       A)创建数据目录:在启动MongoDB之前,首先要给MongoDB指定一个数据存储的路径,比如在MongoDB的安装路径下创建一个data文件夹,专门用来存储数据:D:\MongoDB\Server\4.2\data
       B)添加环境变量:将MongoDB的bin目录添加到环境变量中,方便后期调用;
       C)启动MongoDB:执行命令mongod --dbpath D:\MongoDB\Server\4.2\data启动。

    4、连接MongoDB

       A)使用CMD连接:在环境变量设置好的前提下,使用命令mongo就可以进入到MongoDB的操作终端了。
       B)使用Compass连接:Compass是一个图形化操作MongoDB的客户端,使用Compass操作MongoDB会更加方便。
       B)使用Navicat连接:Navicat是一个可以操作MySQL数据库非常方便的软件,使用Navicat操作数据库,就跟使用Excel操作数据是一样的。

    5、将MongoDB制作成Windows服务

       启动MongoDB后,如果想让MongoDB一直运行,那么这个终端便不能关闭,而且每次运行的时候还需要指定data目录,为了便于以后使用,可以将MongoDB制作成一个服务,以后通过一行命令就可以运行了。

       A)创建配置文件:在MongoDB的安装路径下创建配置文件mongod.cfg(路径和名字可自行设置),然后在配置文件中添加如下代码:

    logpath = D:\MongoDB\Server\4.2\data\logs\mongod.log
    dbpath = D:\MongoDB\Server\4.2\data\db
    

       说明:logpath是日志文件的路径,dbpath是MongoDB数据库的存储路径。

       B)安装MongoDB服务:使用命令mongod --config "cfg配置文件所在路径" --install,比如mongod --config "D:\MongoDB\Server\4.2\mongod.cfg" --install
       C)启动MongoDB服务:net start mongodb
       D)关闭MongoDB服务:net stop mongodb
       E)移除MongoDB服务:"D:\MongoDB\Server\4.2\bin\mongod.exe" --remove

    7、MongoDB介绍

    SQL术语/概念 MongoDB术语/概念 解释/说明
    database database SQL:数据库
    MongoDB:数据库
    table collection SQL:数据库表
    MongoDB:集合
    row document SQL:数据记录行
    MongoDB:文档
    column field SQL:数据字段
    MongoDB:域
    index index SQL:索引
    MongoDB:索引
    table joins SQL:表连接
    MongoDB:不支持
    primary key primary key SQL: 主键
    MongoDB:主键,自动将_id字段设置为主键
    1)MongoDB三元素

       A)数据库
       B)集合(collection):就是关系型数据库中的表,可以存储多个文档,结构可以不固定,可以存储如下文档在一个集合中:

      {"name": "aaa", "gender": "1"}
      {"name": "bbb", "age": 18}
      {"title": "ccc", "price": 20.9}
    

       C)文档(document):就是关系型数据库中的一行,文档是一个对象,由键值对构成,是json的扩展形式:{'name': 'aaa', 'gender': '1'}

    2)MongoDB操作命令

       A)db:查看当前的数据库;
       B)show dbs:查看所有的数据库;
       C)use 数据库名:切换数据库,如果数据库不存在,则创建一个(创建完成后需要插入数据库才算创建成功);
       D)db.dropDatabase():删除当前指向的数据库;
       E)db.集合名.insert(value):添加数据到指定的集合中;
       F)db.集合名.find():从指定的结合中查找数据。
       注:更多命令请见http://www.runoob.com/mongodb/mongodb-tutorial.html

    8、使用Python操作MongoDB

       1)操作MongoDB需要使用的中间件:pymongo。
       2)连接MongoDB并写入数据。

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    # 写入数据
    collection.insert_one({"name": "Kevin", "age": 20, "job": "PM"})
    

       MongoDB的数据类型:

    类型 说明
    Object ID 文档ID
    String 字符串,最常用,必须是有效的UTF-8
    Boolean 存储一个布尔值,true或false
    Integer 整数可以是32位或64位,这取决于服务器
    Double 存储浮点值
    Arrays 数组或列表,多个值存储到一个键
    Object 用于嵌入式的文档,即一个值为一个文档
    Null 存储Null值
    Timestamp 时间戳,表示从1970-01-01到现在的总秒数
    Date 存储当前日期或时间的UNIX时间格式

       3)新增数据(Insert)
       A)新增一条数据insert_one/insert,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    # 新增数据
    person = {
        "name": 'Jhon',
        "age": 21,
        "job": "IT"
    }
    # 插入数据到数据库
    collection.insert_one(person)
    

       B)新增多条数据insert_many,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    # 新增数据
    person = [{
        "name": 'Jacky',
        "age": 21,
        "job": "IT"
    },
    {
        "name": 'Jose',
        "age": 24,
        "job": "HR"
    }]
    # 插入数据到数据库
    collection.insert_many(person)
    

       4)查询数据(Find)
       A)查询集合中所有数据find,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    cursor = collection.find()
    for data in cursor:
        print(data)
    

       运行结果:

    {'_id': ObjectId('5e951d2d8841ab7f4f0dece0'), 'name': 'Kevin', 'age': 20, 'job': 'PM'}
    {'_id': ObjectId('5e9533e97872f736c34c6ddb'), 'name': 'Jhon', 'age': 21, 'job': 'IT'}
    {'_id': ObjectId('5e9534b8d1981fd527e13f83'), 'name': 'Jacky', 'age': 21, 'job': 'IT'}
    {'_id': ObjectId('5e9534b8d1981fd527e13f84'), 'name': 'Jose', 'age': 24, 'job': 'HR'}
    

       B)查询集合中的一条数据find_one,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    data = collection.find_one({"age" : 20})
    print(data)
    

       运行结果:

    {'_id': ObjectId('5e951d2d8841ab7f4f0dece0'), 'name': 'Kevin', 'age': 20, 'job': 'PM'}
    

       5)更新数据(Update)
       A)更新一条数据update_one,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    collection.update_one({"name": "Kevin"}, {"$set":{"name": "Kely"}})
    

       B)更新多条数据update_many,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    collection.update_many({"name": "Kely"}, {"$set":{"name": "Kevin"}})
    

       6)删除数据(Delete)
       A)删除一条数据delete_one,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    collection.delete_one({"name": "Jacky"})
    

       B)删除多条数据delete_many,示例代码如下:

    import pymongo
    
    # 获取连接MongoDB的对象
    conn = pymongo.MongoClient("127.0.0.1", port = 27017)
    
    # 获取数据库(如果没有zhihu这个数据库,会自动创建)
    db = conn.zhihu
    
    # 获取数据库中的集合(也就是MySQL中的表)
    collection = db.qa
    
    collection.delete_many({"name": "Kevin"})
    

    相关文章

      网友评论

        本文标题:Python爬虫-数据存储学习笔记之MongoDB操作

        本文链接:https://www.haomeiwen.com/subject/tyspmhtx.html