您的位置:首页 > 数据库 > Mongodb

利用MongoDB存储scrapy的数据

2015-06-25 09:27 561 查看
之前scrapy都是存储在文件中,该考虑一下数据库了。

当前工作爬取的内容(不是前面说的豆瓣小组)实际上很多都是文档型的,类似于文章+评论的样式,其中文章又包括标题、作者、地址等。使用传统关系数据库当然也可以,使用ID和外键连接就可以了。但既然有了文档型的非关系数据库,就试试吧。

选择了MongoDB,网上查了下,主要特性如下:

面向集合(Collenction-Oriented):意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table)。

模式自由(schema-free):意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

查询与索引方式灵活,是最像SQL的Nosql

MongoDB支持多种语言,这里结合scrapy,选择python,文档地址在这里

简单地说,mongodb中包含三元素:数据库、集合(collection)、文档(document),其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。

试用了一下,感觉使用起来不要太简单!!!

安装MongoDB,可以从官网直接下载安装适合自己系统的版本。

运行:

创建数据文件夹:默认是在\data\db目录下,自己新建了一个数据文件夹
E:\MongoDB


指定数据文件夹:我的MongoDB安装后.exe文件位于
C:\Program Files\MongoDB\Server\3.0\bin
下,使用命令行运行db服务:

C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe --dbpath E:\MongoDB


如果目录中有空格,则需要用“”将整个目录包起来

使用:

结合我们之前的工作,在pipeline里将数据存储到mongodb中,修改pipelines.py,老规矩,贴代码:

from pymongo import MongoClient

class MongoDBPipeline(object):
def __init__(self):
client = MongoClient()
self.db = client.primer

def process_item(self, item, spider):
self.db.post.insert(dict(item))
return item


我使用的是3.0版本,不同版本的代码不同,具体的注意查看文档。

首先申明了一个client,然后定义了数据库,名字叫做“primer”,需要注意的是这里的primer可以是原本不存在的,这种情况下会新建一个。也可以使用另外一种写法
db = client['primer']


在处理item的时候,执行了insert操作,这里定义了collection为“post”,和之前数据库定义一样,如果post不存在则新建,将dict格式的item插入数据库中。

ok,这就完成了,简单的有点难以置信……

去看看数据库吧,的确存在了…………

附一个挺好用的mongo客户端: Robomongo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: