ProxyLeaper
ProxyLeaper ('proxy' - прокси 'to leap' - прыгать) это класс Python для выдачи потокам выполнения (threads) строк прокси. Предназначен для работы с API, ограничивающим количество запросов в секунду, скраппинга через Selenium, и т.п. Список прокси хранится в файле конфигурации .ini . Прокси выдаются случайным образом, RoundRobin не реализован и не планируется.
Совместимость и зависимости
Класс разрабатывался и тестировался на Python 3.10.10, на других версиях не проверялся. Используются только стандартные модули. Тесты (untitest) в каталоге /tests
Установка
В каталоге своего проекта
git clone https://hub.mos.ru/alexey-trofimov/proxyleaper.git
Появится каталог /proxyleaper .
В вызывающем коде импортируйте
from proxyleaper.proxyleaper import ProxyLeaper
Пример использования
proxy_leaper = ProxyLeaper()
def my_thread_target(name):
available_proxy = proxy_leaper.acquire_proxy()
if available_proxy : #может вернуть None если все прокси заняты
try:
proxy_line = proxy_leaper.make_proxy_string(available_proxy, use_auth=True)
my_api_scrapper(proxy_line)
#отработал хорошо - возврващаем, сбрасываем счётчик ошибок
proxy_leaper.release_proxy(available_proxy)
except:
#ошибка - увеличиаем счётчик, если max_fails_to_disable - вообще выключим
proxy_leaper.release_proxy(available_proxy, error='Случилось страшное!')
else:
print('Нет свободных прокси!')
time.sleep(1)
Файл конфигурации
По умолчанию proxy_leaper.ini в том же каталоге, что и proxy_leaper.py (имя и путь можно изменить при создании экземпляра). Формат .ini был выбран из-за наглядности представления и удобства редактирования. Для удобства работы с десятками/сотнями прокси в комплекте есть Утилиты
; Файл конфигурации ProxyLeaper()
; Глобальные настройки
[SETTINGS]
; Через количество секунд inactivity_seconds_to_free прокси будет считаться свободным для выдачи следующему потребителю
inactivity_seconds_to_free = 2
; После количества ошибок max_fails_to_disable прокси считается нерабочим, и не будет участвовать в выдаче
max_fails_to_disable = 30
; Если все прокси заняты, acquire_proxy() будет пытаться раз а секунду ещё max_wait_seconds раз, прежде чем вернёт False
max_wait_seconds = 9
; Далее секции на каждый прокси
[PROXY6_29380992]
; Белый список: '231.150.252.109:9936' или авторизация: 'eP25Kk:mvxLVs@231.150.252.109:9936'
host = 231.150.252.109
port = 9936
username = ea25Kk
password = mvdLVs
owner = None
dispatched = 14:24:16 16-08-2024
fails = 0
[PROXY6_29379578]
; Белый список: '140.185.109.197:9517' или авторизация: '01W141:rZchZ8@140.185.109.197:9517'
host = 140.185.109.197
port = 9517
username = 01W143
password = 7ZchZ8
owner = None
dispatched = 14:24:16 16-08-2024
fails = 0
Утилиты
Скрипт fetch_proxy_proxy6.py позволяет призвести импорт прокси из сервиса PROXY6. Да, ссылка реферальная, и вот ещё промокод для PROXY6: ZHNsYjIEOk . Для использования fetch_proxy_proxy6.py нужно зарегистрироваться, купить прокси, на странице https://proxy6.net/user/proxy получить свой ключ API, и указать его в файле fetch_proxy_proxy6.ini в поле proxy6_api_key. В файле c именем из поля out_file_name (proxyleaper.tmp) будут сгнерированны значения, которые использует ProxyLeaper. Их нужно будет перенести (добавить) в файл конфигурации .ini.
Почему не по-ангийски ?
Пусть учат язык. Пригодится ;)