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中的yield使用方法
Feb 11 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
python ansible服务及剧本编写
Dec 29 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
Python解析Excle文件中的数据方法
Oct 23 Python
python 循环数据赋值实例
Dec 02 Python
python将音频进行变速的操作方法
Apr 08 Python
Python如何生成xml文件
Jun 04 Python
python相对企业语言优势在哪
Jun 12 Python
详解python算法常用技巧与内置库
Oct 17 Python
python实现自动化群控的步骤
Apr 11 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
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python的json包位置及用法总结
2020/06/21 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
学校门卫管理制度
2014/01/30 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
庆六一开幕词
2015/01/29 职场文书
单位介绍信格式范文
2015/05/04 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS