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中获取网页状态码的两个方法
Nov 03 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
在Django的session中使用User对象的方法
Jul 23 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
Python for循环与getitem的关系详解
Jan 02 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
python实现文字版扫雷
Apr 24 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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/10/09 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python实现快速计算词频功能示例
2018/06/25 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
python 爬取小说并下载的示例
2020/12/07 Python
行政专员工作职责
2013/12/22 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
期末学生评语大全
2014/04/24 职场文书
班组长安全工作职责
2014/07/15 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
内乡县衙导游词
2015/02/05 职场文书
幼儿园小班个人总结
2015/02/12 职场文书