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实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
Python rstrip()方法实例详解
Nov 11 Python
python调用c++传递数组的实例
Feb 13 Python
对python周期性定时器的示例详解
Feb 19 Python
django celery redis使用具体实践
Apr 08 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
Django异步任务线程池实现原理
Dec 17 Python
基于python代码批量处理图片resize
Jun 04 Python
python中如何打包用户自定义模块
Sep 23 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python 备份程序代码实现
2017/03/06 Python
Python有序字典简单实现方法示例
2017/09/28 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
高中生期末评语大全
2014/01/28 职场文书
国际金融专业自荐信
2014/07/05 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
离婚协议书样本
2015/01/26 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python