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绘图库Matplotlib的安装
Jul 03 Python
python fabric使用笔记
May 09 Python
python自动12306抢票软件实现代码
Feb 24 Python
python线程中的同步问题及解决方法
Aug 29 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
python中reload重载实例用法
Dec 15 Python
基于flask实现五子棋小游戏
May 25 Python
python中的sys模块和os模块
Mar 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
解决中英文字符串长度问题函数
2007/01/16 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
PHP7新增函数
2021/03/09 PHP
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python九九乘法表的实例
2017/09/26 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python发展史及网络爬虫
2019/06/19 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
《草原》教学反思
2014/02/15 职场文书
协议书与合同的区别
2014/04/18 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
2015年党建工作总结
2015/03/30 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
初中数学课堂教学反思
2016/02/17 职场文书