利用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目录下,自己新建了一个数据文件夹
指定数据文件夹:我的MongoDB安装后.exe文件位于
如果目录中有空格,则需要用“”将整个目录包起来
使用:
结合我们之前的工作,在pipeline里将数据存储到mongodb中,修改pipelines.py,老规矩,贴代码:
我使用的是3.0版本,不同版本的代码不同,具体的注意查看文档。
首先申明了一个client,然后定义了数据库,名字叫做“primer”,需要注意的是这里的primer可以是原本不存在的,这种情况下会新建一个。也可以使用另外一种写法
在处理item的时候,执行了insert操作,这里定义了collection为“post”,和之前数据库定义一样,如果post不存在则新建,将dict格式的item插入数据库中。
ok,这就完成了,简单的有点难以置信……
去看看数据库吧,的确存在了…………
附一个挺好用的mongo客户端: Robomongo
当前工作爬取的内容(不是前面说的豆瓣小组)实际上很多都是文档型的,类似于文章+评论的样式,其中文章又包括标题、作者、地址等。使用传统关系数据库当然也可以,使用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
相关文章推荐
- mongodb 学习笔记 04 -- 游标、索引
- mongodb维护常用命令
- 【Monkey Run】2015博客keep doing outline
- 用mongodb存储日志
- 10-【MongoDB入门教程】 Journaling日志机制
- MongoDB 在mac上安装
- 为首次部署MongoDB做好准备:容量计划和监控
- mongodb性能优化
- MongoDB常用操作命令大全
- 转:mongodb的安装及主从复制
- MongoDB使用小结:一些常用操作分享
- 2-mongoDB命令
- MongoDB学习笔记~管道中的分组实现group+distinct
- mongodb时间戳转换成格式化时间戳
- MongoDB 进程控制系列二:结束进程
- linux shell 导出mongodb 数据库 & 导出 mysql数据库
- Ubuntu下安装PHP的mongodb扩展
- MongoDB 进程控制系列一:查看当前正在执行的进程
- MongoDB CRUD 操作手册
- 解决mongodb连接失败问题