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设计模式之策略模式
Nov 18 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python列表list保留顺序去重的实例
Dec 14 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
Python当中的array数组对象实例详解
Jun 12 Python
linux环境中没有网络怎么下载python
Jul 07 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 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
php4的session功能评述(二)
2006/10/09 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
javascript 动态加载 css 方法总结
2009/07/11 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
js文字横向滚动特效
2015/11/11 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
canvas时钟效果
2017/02/16 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python导入oracle数据的方法
2015/07/10 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python 转换文本编码实现解析
2019/08/27 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
军训心得体会
2013/12/31 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
管理工程专业求职信
2014/08/10 职场文书
委托书格式范文
2015/01/28 职场文书
中标通知书
2015/04/17 职场文书
篮球拉拉队口号
2015/12/25 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python
python如何读取和存储dict()与.json格式文件
2022/06/25 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS