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网络编程学习笔记(10):webpy框架
Jun 09 Python
python进阶教程之词典、字典、dict
Aug 29 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
如何高效使用Python字典的方法详解
Aug 31 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Python中遍历列表的方法总结
Jun 27 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
Django模板语言 Tags使用详解
Sep 09 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
什么是python类属性
Jun 10 Python
Django缓存Cache使用详解
Nov 30 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查看session内容的函数
2008/08/27 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
解读ES6中class关键字
2017/11/20 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
Python+django实现文件下载
2016/01/17 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python实现简单神经网络算法
2018/03/10 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
检察官就职演讲稿
2014/01/13 职场文书
会走路的树教学反思
2014/02/20 职场文书
班级文化建设标语
2014/06/23 职场文书
2014年教师节寄语
2014/08/11 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
民事辩护词范文
2015/05/21 职场文书
军训后的感想
2015/08/07 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL