将小说保存到MongoDB
在前文中,我们将小说的每个章节保存为独立的文本文件。今天我们准备把小说内容输出到数据库。对于数据存储,我选择MongoDB。为什么是MongoDB而不是其它?原因是以前没用过,想尝试下。
现在我们已经知道,要把抓取来的数据保存到数据库,只需实现Item Pipeline即可。我们可以仿照前面的实现依葫芦画瓢。
以下是将小说内容保存到MongoDB的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import pymongo
class MongoPipeline(object):
def open_spider(self, spider):
self.client = pymongo.MongoClient('localhost', 27017)
self.novel = self.client['novel']
self.ssjx = self.novel['ssjx']
def process_item(self, item, spider):
data = {
# 标题和内容都是列表类型,必须先转换成字符串
'title' : ''.join(item['title']),
'content' : ''.join(item['content']),
}
self.ssjx.insert(data)
return item
def close_spider(self, spider):
self.client.close()
|
将组件添加到novel/settings.py的ITEM_PIPELINES配置中以启用它:
1
2
3
4
| ITEM_PIPELINES = {
'novel.pipelines.TxtPipeline' : 300,
'novel.pipelines.MongoPipeline' : 400,
}
|
在项目的根目录中使用下面的指令运行Spider:
1
| scrapy crawl novelspider
|
如果没有问题的话,爬虫会不停地运行,小说的章节内容也会被一个个地保存到数据库。下面的截图是最终的抓取结果:
