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实现RSA加密(解密)算法
Feb 17 Python
Django自定义manage命令实例代码
Feb 11 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
Python 查找字符在字符串中的位置实例
May 02 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
详解如何用Python实现感知器算法
Jun 18 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
又十个超级有用的PHP代码片段
2015/09/24 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP中16个高危函数整理
2019/09/19 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
实现高性能javascript的注意事项
2019/05/27 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python如何实现int函数的方法示例
2018/02/19 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
基于Python List的赋值方法
2018/06/23 Python
python计算auc的方法
2020/09/09 Python
python GUI计算器的实现
2020/10/09 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
工商管理毕业生推荐信
2013/12/24 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
英语辞职信范文
2015/02/28 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis