您好,登錄后才能下訂單哦!
小編給大家分享一下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 對象,定義了三個接口,分別是首頁、隨機代理頁、獲取數量頁。
只需要訪問對應的接口即可獲取到可用代理:
調度模塊
調用定義的獲取、存儲、檢測三個模塊,將這三個模塊通過多進程的形式運行起來
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池實現接口設置與整體調度的示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。