美文网首页
更适合爬虫的nosql MongoDB

更适合爬虫的nosql MongoDB

作者: nil_ddea | 来源:发表于2020-11-15 21:03 被阅读0次

    为什么nosql

    在一个更加普遍通用的爬虫程序中,原始数据往往是杂乱且没有规律的,将这些数据存储在关系型数据库中的成本很高,定义schema就是一个非常繁琐复杂的工作,而且爬虫数据一般没有OLTP的需求,这时候使用nosql也许是更好的选择。

    为什么MongoDB

    • MongoDB的提供了一个面向文档存储(类似于 JSON 对象,但比JSON支持更多数据类型),适用于整个对象存储,操作起来比较简单和容易。
    • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
    • MongoDb 使用update()命令可以实现替换完成的文档,适用于覆盖历史数据的操作。
    • 支持索引,有大量数据是保证了查询速度。

    MongoDB使用

    可以使用docker简单的启动一个没有用户认证的mongo实例

    docker run -itd --name mongo -p 27017:27017 mongo
    

    写入数据,在uper集合中插入一条文档,集合不存在会自动创建。

    > db.uper.insert({nick: 'C酱です',
        uid:67141,
        description: '一名普通玩家(:3rz) 直播间:live.bilibili.com/213',
        tags: ['游戏', '单机游戏'],
        fans: 6400000  
    })
    

    查询

    # 查询uper中所有的文档
    > db.uper.find().pretty()
    {
        "_id" : ObjectId("5fb1224b8f09d0de911ee41e"),
        "nick" : "C酱です",
        "uid" : 67141,
        "description" : "一名普通玩家(:3rz) 直播间:live.bilibili.com/213",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 6400000
    }
    {
        "_id" : ObjectId("5fb1238d8f09d0de911ee41f"),
        "nick" : "影视飓风",
        "uid" : 946974,
        "description" : "商务合作/广告/宣传片/影视摄制私信",
        "tags" : [
            "影视"
        ],
        "fans" : 1785000
    }
    {
        "_id" : ObjectId("5fb123cd8f09d0de911ee420"),
        "nick" : "黑桐谷歌",
        "uid" : 43536,
        "description" : "一个普通喜欢玩游戏的人",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 2260000
    }
    {
        "_id" : ObjectId("5fb1245b8f09d0de911ee421"),
        "nick" : "风铃秋石",
        "uid" : 7722619,
        "description" : "配了音的攻略视频都推荐1.25倍速播放,LOL新手向攻略UP主。大部分攻略有很多分P可挑选观看,声音天生,不喜勿喷!",
        "tags" : [
            "游戏",
            "网络游戏",
            "英雄联盟"
        ],
        "fans" : 56000
    }
    
    
    # 查询tag带有"游戏"的文档
    > db.uper.find( {     tags:'游戏' }).pretty()
    {
        "_id" : ObjectId("5fb1224b8f09d0de911ee41e"),
        "nick" : "C酱です",
        "uid" : 67141,
        "description" : "一名普通玩家(:3rz) 直播间:live.bilibili.com/213",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 6400000
    }
    {
        "_id" : ObjectId("5fb123cd8f09d0de911ee420"),
        "nick" : "黑桐谷歌",
        "uid" : 43536,
        "description" : "一个普通喜欢玩游戏的人",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 2260000
    }
    {
        "_id" : ObjectId("5fb1245b8f09d0de911ee421"),
        "nick" : "风铃秋石",
        "uid" : 7722619,
        "description" : "配了音的攻略视频都推荐1.25倍速播放,LOL新手向攻略UP主。大部分攻略有很多分P可挑选观看,声音天生,不喜勿喷!",
        "tags" : [
            "游戏",
            "网络游戏",
            "英雄联盟"
        ],
        "fans" : 56000
    }
    
    # 查询tag带有"游戏" 并且粉丝大于500万的
    > db.uper.find(
       {
           tags:'游戏',
           fans:{"$gte" : 5000000}
       }).pretty()
    {
        "_id" : ObjectId("5fb1224b8f09d0de911ee41e"),
        "nick" : "C酱です",
        "uid" : 67141,
        "description" : "一名普通玩家(:3rz) 直播间:live.bilibili.com/213",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 6400000
    }
    

    当数据发生变化时 更新覆盖旧数据

    # 更新uid67141的uper的粉丝数
    > db.uper.update({'uid':67141},{$set:{'fans':6600000}})
    
    # 更新后的数据
    > db.uper.find({uid:67141}).pretty()
    {
        "_id" : ObjectId("5fb1224b8f09d0de911ee41e"),
        "nick" : "C酱です",
        "uid" : 67141,
        "description" : "一名普通玩家(:3rz) 直播间:live.bilibili.com/213",
        "tags" : [
            "游戏",
            "单机游戏"
        ],
        "fans" : 6600000
    }
    

    相关文章

      网友评论

          本文标题:更适合爬虫的nosql MongoDB

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