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制作简易注册登录系统
Dec 15 Python
Python实现调度算法代码详解
Dec 01 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
anaconda如何查看并管理python环境
Jul 05 Python
利用Python检测URL状态
Jul 31 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
为什么说Python可以实现所有的算法
Oct 04 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
python实现五子棋程序
Apr 24 Python
python实现简单的五子棋游戏
Sep 01 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php利用header函数下载各种文件
2016/08/24 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python中类的初始化特殊方法
2017/12/01 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
python多线程并发及测试框架案例
2019/10/15 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
提拔干部考察材料
2014/05/26 职场文书
小组组名及励志口号
2015/12/24 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
Python Flask实现进度条
2022/05/11 Python