继续在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
原文:https://www.cnblogs.com/tkg1314/p/12611378.html