python scrapy 在pipeline 把爬取内容写入MongoDB数据库

 写入MongoDB数据库的基本配置

#配置MongoDB数据库的连接信息
MONGO_URL = '172.16.5.239'
MONGO_PORT = 27017
MONGO_DB = 'zhihuuser'

#参数等于False,就等于告诉你这个网站你想取什么就取什么,不会读取每个网站的根目录下的禁止爬取列表(例如:www.baidu.com/robots.txt)
ROBOTSTXT_OBEY = False


执行pipelines下的写入操作
ITEM_PIPELINES = {
   'zhihuuser.pipelines.MongoDBPipeline': 300,
}
pipelines.py:
  1、首先我们要从settings文件中读取数据的地址、端口、数据库名称(没有会自动创建)。
  2、拿到数据库的基本信息后进行连接。
  3、将数据写入数据库
  4、关闭数据库
  注意:只有打开和关闭是只执行一次,而写入操作会根据具体的写入次数而定。


import pymongo
class MongoDBPipeline(object):

    def __init__(self, mongourl, mongoport, mongodb):
        '''
        初始化mongodb数据的url、端口号、数据库名称
        '''
        self.mongourl = mongourl
        self.mongoport = mongoport
        self.mongodb = mongodb

    @classmethod
    def from_crawler(cls, crawler):
        """
        1、读取settings里面的mongodb数据的urlportDB
        """
        return cls(
            mongourl=crawler.settings.get("MONGO_URL"),
            mongoport=crawler.settings.get("MONGO_PORT"),
            mongodb=crawler.settings.get("MONGO_DB")
        )

    def open_spider(self, spider):
        '''
        1、连接mongodb数据
        '''
        self.client = pymongo.MongoClient(self.mongourl, self.mongoport)
        self.db = self.client[self.mongodb]

    def process_item(self, item, spider):
        '''
        1、将数据写入数据库
        '''
        name = item.__class__.__name__
        # self.db[name].insert(dict(item))
        self.db['user'].update({'url_token': item['url_token']}, {'$set': item}, True)
        return item

    def close_spider(self, spider):
        #关闭数据库
        self.client.close()






猜你喜欢

转载自blog.csdn.net/qq_38282706/article/details/80958631