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,类型均为字符型 实际应用 ...
随机推荐
- Soat控制HAProxy 动态增减服务器
Soat控制HaProxy 动态增减服务器 安装HaProxy-1.5.18: yum install haproxy -y yum install socat -y HaProxy-1.5.18 配 ...
- 🎉 Element UI for Vue 3.0 来了!
第一个使用 TypeScript + Vue 3.0 Composition API 重构的组件库 Element Plus 发布了 ~ 2016 年 3 月 13 日 Element 悄然诞生,经历 ...
- Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/jsse.pack
[root@localhost ~]# rpm -ivh jdk-7u7-linux-i586.rpm Preparing... ################################### ...
- 【Linux】同时插入多行数据到文本文件中
如果想同时插入多行数据到指定的文本中,可以用下面的命令EOF cat >> test.txt <<EOF 1234 5678 GOOD EOF 将上述3行插入到 test.tx ...
- P2986 [USACO10MAR]伟大的奶牛聚集(思维,dp)
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- 1V升3V芯片,1V升3.3V芯片,大电流的,低功耗
一般来说,1V的电压实在很低了,即使是干电池的话,再1V时,也是基本属于没电状态了.还有一种是干电池输出电流大时,也会把干电池的电压从1.5V拉低到1V左右. 更多的是客户对于1V时要能升到3V或者3 ...
- 深度学习DeepLearning技术实战研修班
深度学习DeepLearning(Python)实战培训班 时间地点: 2020 年 12 月 18 日-2020 年 12 月 21日 (第一天报到 授课三天:提前环境部署 电脑测试) 一.培训方式 ...
- Django - WebSocket:dwebsocket
Django - WebSocket:dwebsocket 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换 ...
- 免费稳定图床最佳实践:PicGo+GitHub+jsDeliver 极简教程
一.下载 PicGo PicGo 是啥?顾名思义,它是一个快速上传图片并获取 图片 URL 链接的工具. 目前支持七牛.腾讯云.阿里云和 GitHub 等图床.该工具代码已在 GitHub 开源,读者 ...
- 糊糊的学习笔记--Fiddle抓包
Fiddle简述 Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的&q ...