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