爬虫Scrapy

爬虫笔记(8)scrapy存数据进Mongodb

2017-01-07  本文已影响163人  无事扯淡

scrapy存入数据库的问题是个简单的问题,官方例子代码如下:

#pipelines.py
class MongoPipeline(object):

    collection_name = 'scrapy_items'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    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):
        self.db[self.collection_name].insert(dict(item))
        return item

在scrapy执行完爬虫代码中的parse函数之后就会调用pipelines.py中的内容,这里调用的函数是process_item。如果parse返回Item或者dict就会被存入数据库中,Item这里还没有提到。当然可能还有疑问pipelines.py可能有多个类,到底选哪一个呢?这个需要去settings.py进行注册:

ITEM_PIPELINES = {
   'dy2018.pipelines.MongoPipeline': 300,
}

代码中需要解释的地方:

MONGO_URI = 'mongodb://localhost/'
#MONGO_DATABASE没有在设置文件中体现,而是直接就是'item'
上一篇下一篇

猜你喜欢

热点阅读