首页 > 编程语言 > 详细

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

时间:2020-04-01 13:52:38      阅读:97      评论:0      收藏:0      [点我收藏+]

继续在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

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

原文:https://www.cnblogs.com/tkg1314/p/12611378.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!