P

proxyleaper

Категория проекта: Ожидает модерации

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.

Почему не по-ангийски ?

Пусть учат язык. Пригодится ;)