Scrapy 的安装与使用可以参考我写的博客: Scrapy 爬取QQ新闻
http://blog.csdn.net/u011499937/article/details/79040978
mongoDB 的安装与使用可以参考我写的博客: MongoDB学习笔记
http://blog.csdn.net/u011499937/article/details/79085362
这里我将不多加详述了,今天我将给大家讲讲怎么将两者结合起来。
1.修改配置文件settings.py添加
ITEM_PIPELINES = {
# 'tutorial.pipelines.QQNewsPipeline': 300,
'tutorial.pipelines.QQNewsMongoPipeline':400
}
MONGO_URI = 'mongodb://localhost:27017'
MONGO_DB = "qqNews"
2.修改pipelines.py添加
class QQNewsMongoPipeline(object):
collection = 'military_affairs'
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
'''
scrapy为我们访问settings提供了这样的一个方法,这里,
我们需要从settings.py文件中,取得数据库的URI和数据库名称
'''
return cls(
mongo_uri = crawler.settings.get('MONGO_URI'),
mongo_db = crawler.settings.get('MONGO_DB')
)
def open_spider(self, spider):
'''
爬虫一旦开启,就会实现这个方法,连接到数据库
'''
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
'''
爬虫一旦关闭,就会实现这个方法,关闭数据库连接
'''
self.client.close()
def process_item(self, item, spider):
'''
每个实现保存的类里面必须都要有这个方法,且名字固定,用来具体实现怎么保存
'''
if not item['title']:
return item
data={
'title':item['title'][0],
'content':item['content']
}
table = self.db[self.collection]
table.insert_one(data)
return item
只需简单的修改一下,就可以将两者完美的结合在一起。