上一篇博客地址: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代理池的构建3——爬取代理ip

python代理池的构建2——代理ip是否可用的处理和检查

python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

四、关于代码一些问题解决链接:

协程gevent模块和猴子补丁

python中schedule模块的简单使用 || importlib.import_module动态导入模块

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义

python代理池的构建4——mongdb数据库的增删改查的更多相关文章

  1. 采用c3p0数据库连接池底层是jdbc的数据库的增删改查

    1.新建dbutils包,里面是JdbcUtils类: package cn.com.xxx.xxx.dbutil; import java.sql.Connection; import java.s ...

  2. Laravel 数据库实例教程 —— 使用查询构建器对数据库进行增删改查

    原文地址:https://blog.csdn.net/lmy_love_/article/details/72832259 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table方法, ...

  3. python代理池的构建5——对mongodb数据库里面代理ip检查

    上一篇博客地址:python代理池的构建4--mongdb数据库的增删改查 一.对数据库里面代理ip检查(proxy_test.py) #-*-coding:utf-8-*- ''' 目的:检查代理I ...

  4. python代理池的构建3——爬取代理ip

    上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...

  5. python代理池的构建2——代理ip是否可用的处理和检查

    上一篇博客地址:python代理池的构建1--代理IP类的构建,以及配置文件.日志文件.requests请求头 一.代理ip是否可用的处理(httpbin_validator.py) #-*-codi ...

  6. python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

    一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...

  7. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  8. python通过pymysql实现数据库的增删改查

    今天实现了python对于数据库的增删改查工作: 具体的每一步的数据库的增删盖茶自己都实验过了. 掌握了基本的数据库操作语言.然后就是对于tuple()的认识. 以及对于查询语句中的:fetchone ...

  9. python web.py操作mysql数据库,实现对数据库的增删改查操作

    使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...

随机推荐

  1. python学习笔记 | strftime()格式化输出时间

    time模块 import time t = time.strftime("%Y-%m-%d %H:%M:%S") print(t) datetime模块 import datet ...

  2. Linux学习笔记 | 配置ssh

    目录: SSH的必要性 将默认镜像源修改为清华镜像源 Linux安装ssh软件 使用putty软件实现ssh连接 Windows下安装winscp SSH的必要性 一般服务器都位于远程而非本地,或者及 ...

  3. 终于可以愉快的撸Java异步代码了!

      异步响应式编程可以极大的提高系统的并发呑吐量,但由于Java没有类似于其他语言的Async/Await机制,所以只能通过CompletableFuture.thenXXX()来串联各个异步任务,这 ...

  4. 容器编排系统K8s之HPA资源

    前文我们了解了用Prometheus监控k8s上的节点和pod资源,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14287942.html:今天我们来了解下 ...

  5. python异步回调顺序?是否加锁?

    话不多说,直接上代码: import time from functools import partial from concurrent.futures.process import Process ...

  6. [XAML] 使用 XAML 格式化工具:XAML Styler

    1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...

  7. window安装nvm

    先说一下背景,最近做的两个项目一个是祖传angularjs1.X版本另一个是react hooks结合tailwindcss,前者angularjs的node版本比较低,而tailwindcss的no ...

  8. 安装macosx10.13high serria

    本教程所需资源下载链接: 链接:https://pan.baidu.com/s/1wGTezXz6zGvtlwpv6mMoSg 提取码:r6n9 安装VMware workstation 16.0,安 ...

  9. 深度解读设备的“万能语言”HarmonyOS的分布式软总线能力

    摘要:本文分享鸿蒙分布式软总线,并对相关源代码进行解析,为在鸿蒙系统平台上工作的相关人员的信息参考和指导. 总线是一种内部结构,在计算机系统中,主机的各个部件通过总线相连,外部设备通过相应的接口电路再 ...

  10. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之采样 Transactions

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...