更适合爬虫的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
}

你可能感兴趣的:(更适合爬虫的nosql MongoDB)