更适合爬虫的nosql MongoDB

为什么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
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容