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实现在pickling的时候压缩的方法
Sep 25 Python
python输出指定月份日历的方法
Apr 23 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
python读取LMDB中图像的方法
Jul 02 Python
python3中property使用方法详解
Apr 23 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
python tornado修改log输出方式
Nov 18 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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字符串截取问题
2006/11/28 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
Python urlopen()函数 示例分享
2014/06/12 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python 制作网站小说下载器
2021/02/20 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
数控专业个人求职信范例
2013/11/29 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
员工手册编写范本
2015/05/14 职场文书