Python_01_IP代理池_实现代理池的API模块

继续在mongo_pool.py写,完成按要求查询和添加域名等操作

代码:

    def find(self,conditions={},count=0):
        """
        实现根据条件查询功能
        :param conditions:查询条件字典
        :param count:限制最多取出多少个代理ip
        :return:满足要求的代理ip列表
        """
        cursor=self.proxies.find(conditions,limit=count).sort([('score',pymongo.DESCENDING),('speed',pymongo.ASCENDING)])
        proxy_list=[]
        # 遍历cursor
        for item in cursor:
            item.pop("_id")
            proxy=Proxy(**item)
            proxy_list.append(proxy)
        return proxy_list


    def get_proxies(self,protocol=None,domain=None,count=0,nick_type=0):
        """
        实现根据协议类型和要反问网站的域名获取ip
        :param protocol: 协议http或https
        :param domain: 域名
        :param count: 限制获取ip的数量,默认获取所有
        :param nick_type: 匿名类型,默认获取高匿
        :return: 返回满足要求的代理ip列表
        """
        # 定义查询条件
        conditions={'nick_type':nick_type}
        # 判断协议,指定查询条件
        if protocol is None:
            # 如果没有传入protocol返回既支持http有支持https的ip
            conditions['protocol']=2
        elif protocol.lower()=='http':
            conditions['protocol']={'$in':[0,2]}
        else :
            conditions['protocol']={'$in':[1,2]}

        if domain:
            conditions['disable_domains']={'$in':[domain]}

        return self.find(conditions,count=count)


    def random_proxy(self,protocol=None,domain=None,nick_type=0,count=0):
        """
        根据条件查询单个随机的代理ip
        :param protocol:
        :param domain:
        :param nick_type:
        :param count:
        :return: 与上面的参数一样,但是返回的是满足条件的随机的一个代理ip
        """
        proxy_list=self.get_proxies(protocol=protocol,domain=domain,count=count,nick_type=nick_type)
        # 从proxy_list列表中随机去除一个代理ip
        return random.choice(proxy_list)


    def diable_domain(self,ip,domain):
        """
        实现吧指定域名添加到指定ip的disable_domain的列表中
        :param ip: ip地址
        :param domain: 域名
        :return: 如果返回true,就便是添加成功了,否则添加失败
        """
        if self.proxies.count_documents({'_id':ip,'disable_domains':domain})==0:
            # 如果没有这个域名才能添加

            self.proxies.update_one({'_id':ip},{'$push':{'disable_domains':domain}})
            return True
        return False
    

5

猜你喜欢

转载自www.cnblogs.com/tkg1314/p/12611378.html