码迷,mamicode.com
首页 > 数据库 > 详细

python代理池的构建4——mongdb数据库的增删改查

时间:2020-01-10 10:18:48      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:soc   condition   utf-8   随机   app   速度   部分   setting   isa   

上一篇博客地址:python代理池的构建3——爬取代理ip

 

一、mongdb数据库的增删改查

#-*-coding:utf-8-*-
‘‘‘
实现代理池的数据库模块

      ●作用:用于对proxies 集合进行数据库的相关操作

      目标:实现对数据库增删改查相关操作步骤:

      1.在init 中,建立数据连接,获取要操作的集合,在del方法中关闭数据库连接2.提供基础的增删改查功能

      i.实现插入功能i.实现修改该功能

      ili.实现删除代理:根据代理的IP删除代理iv.查询所有代理IP的功能3.提供代理API模块使用的功能

      i.实现查询功能:根据条件进行查询,可以指定查询数量,先分数降序,速度升序排,保证优质的代

      理IP在上面.

      ii.实现根据协议类型和要访问网站的域名,获取代理IP列表

      ili.实现根据协议类型和要访问网站的域名,随机获取一个代理IPiv.实现把指定域名添加到指定IP的disable_plomain列表中.

‘‘‘
import sys
import logging
import pymongo
from pymongo import MongoClient
sys.path.append("..")
sys.path.append("../..")
from settings import MONGO_URL
from utils.log import logger
from domain import Proxy

class MongoPool(object):
    def __init__(self):
        self.client = MongoClient(MONGO_URL)
                                    #分别对应库和集合
        self.proxies = self.client[Proxies_pool][proxies]

    def __del__(self):
        self.client.close()

    #mongdb中"_id"为主键
    def insert_one(self,proxy):
        count  = self.proxies.count_documents({_id:proxy.ip})
        if count == 0:
            dic = proxy.__dict__
            dic[_id]=proxy.ip
            self.proxies.insert_one(dic)
            logger.info("insert Success:{}".format(proxy))
        else:
            logger.warning("insert Default:{}".format(proxy))

    def update_proxy(self,proxy):
        self.proxies.update_one({_id:proxy.ip},{$set:proxy.__dict__})

    def delete_one(self,proxy):
        self.proxies.delete_one({_id:proxy.ip})
        logger.info("delete ip: {}".format(proxy.ip))

    def find_all(self):
        all = self.proxies.find()
        for item in all:
            item.pop(_id)
            proxy = Proxy(**item)
            yield proxy

    def find(self,condition={},count=10):
        all = self.proxies.find(condition,limit=count).sort(
            [(socre,pymongo.DESCENDING),(speed,pymongo.ASCENDING)]
        )

        proxy_list = []
        for item in all:
            item.pop(_id)
            proxy = Proxy(**item)
            proxy_list.append(proxy)
        return proxy_list

    def get_proxies(self,protocol=None,domain=None,count=8,nick_type=0):
        condition = {nick_type:nick_type}
        if protocol is None:
            condition[protocol]=2
        elif protocol.lower() == http:
            condition[protocol]={$in:[0,2]}
        else :
            condition[protocol] = {$in: [1, 2]}

        if domain:
            condition[disable_domains] = {$nin:[domain]}

        return self.find(condition,count=count)

    def add_disable_domain(self,ip,domain):
        if self.proxies.count_documents({_id:ip,disable_domain:domain})==0:
            self.proxies.update_one({_id:ip},{$push:{disable_domains:domain}})
            return True
        return False

if __name__ == __main__:
    mongo = MongoPool()
    ‘‘‘
    proxy = Proxy(‘117.95.55.40‘, port=‘9999‘)
    
    mongo.insert_one(proxy)
    ‘‘‘

    ‘‘‘
    for proxy in mongo.find_all():
        print(proxy)
    ‘‘‘

    mongo.add_disable_domain(117.95.55.40,jd.com)

 

二、介绍一下这一部分代码怎么用

就是首先创建一个这部分的类对象,然后通过"类.方法名(参数)"来执行方法,这个参数就是我们之前的代理ip对象,这是第一篇博客的内容

 

python代理池的构建3——爬取代理ip这一篇博客就是对这个MongoPool类的使用

 

要想了解更多Mongodb数据库操作,可以看这里:https://www.runoob.com/mongodb/mongodb-tutorial.html

python代理池的构建4——mongdb数据库的增删改查

标签:soc   condition   utf-8   随机   app   速度   部分   setting   isa   

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12174654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!