利用MongoDB存储scrapy的数据

之前scrapy都是存储在文件中,该考虑一下数据库了。
当前工作爬取的内容(不是前面说的豆瓣小组)实际上很多都是文档型的,类似于文章+评论的样式,其中文章又包括标题、作者、地址等。使用传统关系数据库当然也可以,使用ID和外键连接就可以了。但既然有了文档型的非关系数据库,就试试吧。
选择了MongoDB,网上查了下,主要特性如下:

  • 面向集合(Collenction-Oriented):意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table)。
  • 模式自由(schema-free):意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
  • 查询与索引方式灵活,是最像SQL的Nosql

MongoDB支持多种语言,这里结合scrapy,选择python,文档地址在这里
简单地说,mongodb中包含三元素:数据库、集合(collection)、文档(document),其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。

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

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

    1. 创建数据文件夹:默认是在\data\db目录下,自己新建了一个数据文件夹E:\MongoDB
    2. 指定数据文件夹:我的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值