python代理池的构建4——mongdb数据库的增删改查
上一篇博客地址:python代理池的构建3——爬取代理ip
一、mongdb数据库的增删改查(Mongo_pool.py)
#-*-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代理池的构建的其他链接
python代理池的构建5——对mongodb数据库里面代理ip检查
python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
四、关于代码一些问题解决链接:
python中schedule模块的简单使用 || importlib.import_module动态导入模块
Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义
python代理池的构建4——mongdb数据库的增删改查的更多相关文章
- 采用c3p0数据库连接池底层是jdbc的数据库的增删改查
1.新建dbutils包,里面是JdbcUtils类: package cn.com.xxx.xxx.dbutil; import java.sql.Connection; import java.s ...
- Laravel 数据库实例教程 —— 使用查询构建器对数据库进行增删改查
原文地址:https://blog.csdn.net/lmy_love_/article/details/72832259 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table方法, ...
- python代理池的构建5——对mongodb数据库里面代理ip检查
上一篇博客地址:python代理池的构建4--mongdb数据库的增删改查 一.对数据库里面代理ip检查(proxy_test.py) #-*-coding:utf-8-*- ''' 目的:检查代理I ...
- python代理池的构建3——爬取代理ip
上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...
- python代理池的构建2——代理ip是否可用的处理和检查
上一篇博客地址:python代理池的构建1--代理IP类的构建,以及配置文件.日志文件.requests请求头 一.代理ip是否可用的处理(httpbin_validator.py) #-*-codi ...
- python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...
- python链接oracle数据库以及数据库的增删改查实例
初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...
- python通过pymysql实现数据库的增删改查
今天实现了python对于数据库的增删改查工作: 具体的每一步的数据库的增删盖茶自己都实验过了. 掌握了基本的数据库操作语言.然后就是对于tuple()的认识. 以及对于查询语句中的:fetchone ...
- python web.py操作mysql数据库,实现对数据库的增删改查操作
使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...
随机推荐
- kali中安装漏洞靶场Vulhub
一.什么是vulhub? Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加 ...
- ABAP 多表联合查询
inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录 ...
- [Usaco2010 Hol]cowpol 奶牛政坛
题目描述: 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可 ...
- NAT模式、路由模式、桥接模式的区别
NAT模式 NAT模式概述 NAT是"Network Address Translation"的缩写,中文意思是"网络地址转换",它允许一个整体机构以一个公用I ...
- Linux下pcstat安装踩坑教程
首先安装golang 1.进入官方链接下载对应自己系统版本的Golang安装包:https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz root@ub ...
- (Oracle)关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案
在数据抽取时,开发需要clob类型的数据,但是目标库类型是blob类型的,于是抽取的时候报错: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误 可能有以下几种原因: 可能有以下 ...
- java native:Java本地方法调用(jni方式)
https://www.cnblogs.com/zh1164/p/6283831.html
- .NET并发编程-函数式编程
本系列学习在.NET中的并发并行编程模式,实战技巧 函数式编程 和面向过程编程POP(procedure oriented Programming)面向对象编程OOP(object oriented ...
- NodeJS入门学习教程
一.概念 1.什么是nodejs Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 2 ...
- ctsc选课
CTSC 1997 大学实行学分制.每门课程都有一定的学分,学生只要选修了这门课并通过考核就能获得相应学分.学生最后的学分是他选修各门课的学分总和. 每个学生都要选择规定数量的课程.有些课程可以直接选 ...