Python搭建代理IP池实现接口设置与整体调度


Posted in Python onOctober 27, 2019

接口模块需要用 API 来提供对外服务的接口,当然也可以直接连数据库来取,但是这样就需要知道数据库的连接信息,不太安全,而且需要配置连接,所以一个比较安全和方便的方式就是提供一个 Web API 接口,通过访问接口即可拿到可用代理

代码地址:https://github.com/Stevengz/Proxy_pool

另外三篇:
Python搭建代理IP池(一)- 获取 IP
Python搭建代理IP池(二)- 存储 IP
Python搭建代理IP池(三)- 检测 IP

添加设置

添加模块开关变量

setting.py

# 数据库地址
HOST = '127.0.0.1'
# MySql端口
MYSQL_PORT = 3306
# MySQl用户名、密码
MYSQL_USERNAME = '***'
MYSQL_PASSWORD = '***'
# 数据库名
SQL_NAME = 'test'

# 代理等级
MAX_SCORE = 30
MIN_SCORE = 0
INITIAL_SCORE = 10

VALID_STATUS_CODES = [200, 302]

# 代理池数量界限
POOL_UPPER_THRESHOLD = 1000

# 检查周期
TESTER_CYCLE = 20
# 获取周期
GETTER_CYCLE = 300

# 测试API,建议抓哪个网站测哪个
TEST_URL = 'http://www.baidu.com'

# API配置
API_HOST = '0.0.0.0'
API_PORT = 5555

# 开关
TESTER_ENABLED = True
GETTER_ENABLED = True
API_ENABLED = True

# 最大批测试量
BATCH_TEST_SIZE = 10

TESTER_ENABLED、GETTER_ENABLED、API_ENABLED 都是布尔类型,True 或者 False。标明了测试模块、获取模块、接口模块的开关,如果为 True,则代表模块开启

定义接口

使用框架:Flask

api.py

from flask import Flask, g
from db import MySqlClient

__all__ = ['app']

app = Flask(__name__)

def get_conn():
 if not hasattr(g, 'mysql'):
  g.mysql = MySqlClient()
 return g.mysql

@app.route('/')
def index():
 return '<h2>Welcome to Proxy Pool System</h2>'

# 随机代理
@app.route('/random')
def get_proxy():
 conn = get_conn()
 return conn.random()

# 代理池总量
@app.route('/count')
def get_counts():
 conn = get_conn()
 return str(conn.count())

if __name__ == '__main__':
 app.run()

声明了一个 Flask 对象,定义了三个接口,分别是首页、随机代理页、获取数量页。

只需要访问对应的接口即可获取到可用代理:

Python搭建代理IP池实现接口设置与整体调度

调度模块

调用定义的获取、存储、检测三个模块,将这三个模块通过多进程的形式运行起来

scheduler.py

import time
from multiprocessing import Process
from api import app
from getter import Getter
from tester import Tester
from db import MySqlClient
from setting import *


class Scheduler():

 # 定时测试代理
 def schedule_tester(self, cycle=TESTER_CYCLE):
  tester = Tester()
  while True:
   print('测试器开始运行')
   tester.run()
   time.sleep(cycle)
 
 # 定时获取代理
 def schedule_getter(self, cycle=GETTER_CYCLE):
  getter = Getter()
  while True:
   print('开始抓取代理')
   getter.run()
   time.sleep(cycle)
 
 # 开启API
 def schedule_api(self):
  app.run(API_HOST, API_PORT)
 
 def run(self):
  print('代理池开始运行')
  
  if TESTER_ENABLED:
   tester_process = Process(target=self.schedule_tester)
   tester_process.start()
  
  if GETTER_ENABLED:
   getter_process = Process(target=self.schedule_getter)
   getter_process.start()
  
  if API_ENABLED:
   api_process = Process(target=self.schedule_api)
   api_process.start()

if __name__ == "__main__":
 scheduler = Scheduler()
 scheduler.run()

启动入口是 run() 方法,分别判断了三个模块的开关,如果开启的话,就新建一个 Process 进程,设置好启动目标,然后调用 start() 方法运行,这样三个进程就可以并行执行,互不干扰

Python搭建代理IP池实现接口设置与整体调度

Python搭建代理IP池实现接口设置与整体调度

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python线程中对join方法的运用的教程
Apr 09 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
pandas多级分组实现排序的方法
Apr 20 Python
基于Python List的赋值方法
Jun 23 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
python实现猜拳小游戏
Apr 05 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
python实现低通滤波器代码
Feb 26 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 #Python
浅析使用Python搭建http服务器
Oct 27 #Python
Python搭建代理IP池实现存储IP的方法
Oct 27 #Python
Python搭建代理IP池实现获取IP的方法
Oct 27 #Python
详解python statistics模块及函数用法
Oct 27 #Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 #Python
python自动结束mysql慢查询会话的实例代码
Oct 27 #Python
You might like
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
php常用字符函数实例小结
2016/12/29 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
Python易忽视知识点小结
2015/05/25 Python
探究python中open函数的使用
2016/03/01 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python实现三壶谜题的示例详解
2020/11/02 Python
python openpyxl模块的使用详解
2021/02/25 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
应聘医药销售自荐书范文
2014/02/08 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
理想国读书笔记
2015/06/25 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
Java 数组内置函数toArray详解
2021/06/28 Java/Android
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL