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中请使用isinstance()判断变量类型
Aug 25 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
pytorch训练imagenet分类的方法
Jul 27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
python利用tkinter实现屏保
Jul 30 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
PHP 高手之路(三)
2006/10/09 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
php中memcache 基本操作实例
2015/05/17 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
JavaScript函数表达式详解及实例
2017/05/05 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
基于opencv实现简单画板功能
2020/08/02 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
优秀实习自我鉴定
2013/12/04 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python