91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python搭建代理IP池實現接口設置與整體調度的示例

發布時間:2021-02-19 09:27:10 來源:億速云 閱讀:194 作者:小新 欄目:開發技術

小編給大家分享一下Python搭建代理IP池實現接口設置與整體調度的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

接口模塊需要用 API 來提供對外服務的接口,當然也可以直接連數據庫來取,但是這樣就需要知道數據庫的連接信息,不太安全,而且需要配置連接,所以一個比較安全和方便的方式就是提供一個 Web API 接口,通過訪問接口即可拿到可用代理

添加設置

添加模塊開關變量

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 '<h3>Welcome to Proxy Pool System</h3>'

# 隨機代理
@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搭建代理IP池實現接口設置與整體調度的示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴彦淖尔市| 万盛区| 大邑县| 民县| 砀山县| 云梦县| 淮滨县| 高青县| 左云县| 望谟县| 乌兰察布市| 新闻| 金溪县| 大连市| 明光市| 广南县| 洪泽县| 安阳县| 桐庐县| 延安市| 无极县| 杭锦后旗| 鹤峰县| 红安县| 郁南县| 名山县| 江达县| 黑水县| 庄浪县| 会理县| 志丹县| 工布江达县| 阿瓦提县| 苗栗市| 右玉县| 孟津县| 建宁县| 将乐县| 炉霍县| 甘洛县| 黔东|