Python_01_IP代理池_实现代理池的数据库模块

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

  目的:实现对数据库的增删改查操作

  步骤:

    1.在init中,建立数据库连接,获取要操作的集合,在del方法中关闭数据库连接

    2.提供基础的增删改查功能

      1)实现插入功能

      2)实现修改功能

      3)实现删除代理功能

      4)查询所有代理ip功能

    3.提供代理api模块使用的功能

      1)实现查询功能,根据条件进行查询,可以指定查询数量,先分数降序,速度升序排,保证优质的代理ip在上面.

      2)实现根据协议类型和要访问网站的域名获取代理ip列表

      3)实现根据协议类型和要访问完整的域名随机获取一个代理ip

      4)实现把指定域名添加到指定ip的diable_domain列表中

  代码:

from pymongo import MongoClient

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()


    def insert_one(self,proxy):
        # 使用proxy的ip作为mongodb中数据的主键:_id
        count=self.proxies.count_documents({'_id':proxy.ip})
        if count==0:
            dic=proxy.__dict__
            dic['_id']=proxy.id
            self.proxies.insert_one()
            logger.info("插入新的代理:{}".format(proxy))
        else:
            logger.warning("已存在的代理{}".format(proxy))


    def update_one(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("删除代理IP:{}".format(proxy))


    def find_all(self):
        # 查询所有代理ip
        cursor=self.proxies.find()
        for item in cursor:
            # 删除_id这个key
            item.pop('_id')
            proxy=Proxy(**item)
            yield proxy

猜你喜欢

转载自www.cnblogs.com/tkg1314/p/12609850.html
今日推荐