当前位置:Gxlcms > 数据库问题 > python代理池的构建4——mongdb数据库的增删改查

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

时间:2021-07-01 10:21:17 帮助过:4人阅读

-*-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   

人气教程排行