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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
Django rest framework实现分页的示例
May 24 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
Python基础知识点 初识Python.md
May 14 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python实现动态创建类的方法分析
Jun 25 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
python求前n个阶乘的和实例
Apr 02 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
python实现mean-shift聚类算法
Jun 10 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中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
php类常量的使用详解
2013/06/08 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python argv用法详解
2016/01/08 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Python selenium自动化测试模型图解
2020/04/15 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
聊聊python中的异常嵌套
2020/09/01 Python
Python使用xpath实现图片爬取
2020/09/16 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
英国网上购买门:Direct Doors
2018/06/07 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
参观考察邀请函范文
2014/01/29 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
异地年检委托书范本
2014/09/24 职场文书
高三英语复习计划
2015/01/19 职场文书
导游词开场白
2015/01/31 职场文书
大国崛起英国观后感
2015/06/02 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书