Skip to main content

Library for take current proxy from API

Project description

Различные утилиты которые лень писать каждый раз

  • saver (Предназначена для сохранения файлов)
  • ua (Ротация юзер агентов. Мне не очень нравятся другие библиотеки)
  • repo (Базовый репозиторий для crud операция а также фабрика через метакласс)
  • parsed (Сохраняет в csv спарсенные и не удачно спарсенные файлы)
  • proxy (Менеджер для сервиса ротации прокси (самописного))

Saver

Назначение

Cохранять структурированно скаченные файлы в зависимости от даты и времени в формате:
{базовая_папка}/год/месяц/день/час/путь

Установка:

pip install mangust228[saver]

Пример использования:

from mangust228.saver import AsyncSaveManager, SyncSaveManager

saver = AsyncSaveManager(base_path="example", compress=True)
# Первый аргумент - контент str, все последующие: то что добавить к названию
path = await saver.save_html("this is content", "seller_id", 4, 5)
print(path)  # "example/2024/05/29/22/seller_id_4_5.html.xz"

Для Синхронного метода методы аналогичные, только без await

Возможные аргументы

  • base_path: str Начальная папка в которую будет все сохраняться
  • add_uuid: bool Добавить случайные символы в конце(на самом деле используется nanoid)
  • compress: bool Сжать ли документ в формат .xz
  • debug: bool Отображать ли логи

Ua

Назначение

Ротация user-agent. Мне не очень нравятся другие библиотеки из за устаревших ua.

Установка:

pip install mangust228[ua]

Пример использования:

# get Random User-Agent
UaRandom.web()
# get User-Agent like Chrome
UaRandom.web("chrome") 
# get User-Agent like Firefox
UaRandom.web("firefox")
# get User-Agent like Safari
UaRadom.web("safari")

repo

Назначение

Фабрика и Базовый репозиторий для выполнения CRUD операция

Установка:

pip install mangust228[repo]

Пример использования:

from mangust228.utils.repo import AsyncBaseRepo, AsyncBaseRepoFactory

# Модель алхимии
class UserModel(Base): 
    name: Mapped[str]
    surname: Mapped[str]

class UserRepo(AsyncBaseRepo[UserModel]):
    model = UserModel

    # Кастомный метод для работы с моделью
    async def do_something(self):
        stmt = select().where()
        self.session.execute(stmt)
        return 42

class Repository(AsyncBaseRepoFactory):
    session = session_maker # Объект SQLAlchemy 
    # Добавить кол-во репозиториев можно сколько угодно.
    user: UserRepo  
    another_repo: AnotherRepo 

async with Repository() as repo:
    user_model = UserModel(name="Sergey", surname="Sergeevich") # >> None 
    user = await repo.user.add_by_model(user_model) # Добавить в сессию модель

    await repo.user.add_by_kwargs(name="Ivan", surname="Ivanov") # >> UserModel

    # Удаляет по фильтру
    await repo.user.delete(name="Ivan") # >> int (Количество удаленных строк) 

    # Обновить по id (Модель должна содержать поле id!)
    await repo.user.update_by_id(id=5) # >> UserModel | None

    # Получить одного удовлетворящего условиям
    await repo.user.get_one_or_none(id=2, name="Sergey") # >> UserModel | None

    # Получить много моделей по фильтру. Можно передать limit and offset
    await repo.user.get_many(limit=5, name="Ivan") # list[UserModel]

    # Получить кол-во записей, удовлетворяющих условию(можно не передавать условия)
    await repo.user.count(surname="Petrov") # int (Кол-во Петровых) 

Аргументы которые можно передать в Repository():

  • commit (default: True): Сохраянть ли изменения, если использовать только GET, то можно поставить False
  • debug (default: False): Выводить логи
  • kwargs Аргументы которые передатутся в сессию

proxy

Назначение

Методы для работы с собственным сервисом ротации проксей

Установка:

pip install mangust228[proxy]

Пример использования:

from mangust228.proxy import SyncProxyManager, AsyncProxyManager

with SyncProxyManager() as pm:
    # Получить прокси
    proxy_1: ProxySchema = pm.get() 

    # Поменять прокси, если была вызвана ошибка 
    proxy_2: ProxySchema = pm.change_with_error(new_proxy, reason="just a test")

    # Поменять прокси, просто для профилактики
    proxy_3: ProxySchema = pm.change_without_error(new_proxy)

    # Освободить прокси 
    pm.free(proxy_3) 

async with AsyncProxyManager as pm: 
    proxy = await pm.get() # Методы аналоичные


# атрибуты объекта proxy: 
proxy.req_conn # формат, который подходит для вставки в requests или httpx
proxy.pw_conn # формат, который подходит для вставки в playwright   

Переменные окружения

PROXY_SERVICE_URL=http://100.100.100.100 # IP на котором сервис ротации
PROXY_SERVICE_API_KEY=SUPER_SECRET_API_KEY # API ключ 
PROXY_SERVICE_SERVICE_NAME=test # Сервис который парсим
PROXY_SERVICE_SERVICE_ID=1 # id сервиса который парсим 
PROXY_SERVICE_LOCK_TIME=300 # На сколько замораживаем прокси (в сек.) 

# not required
PROXY_SERVICE_LOGIC=linear # Алгоритм вычисления блокировки прокси
PROXY_SERVICE_LOGIC_BASE_TIME=10 # Базовое время блокировки (см. доку по сервису Ротации)
PROXY_SERVICE_IGNORE_HOURS=24 # см. доку по сервису Ротации
PROXY_SERVICE_TYPE_ID=1 # Тип прокси 1 - IPv4
PROXY_SERVICE_LOCATION_ID=1 # Геолокация 1 - Россия 

parsed

Назначение

Отслеживать, что спарсил, а что нет.

Установка:

pip install mangust228[proxy]

Пример использования:

from parsed_manager import AsyncParsedManager as ParsedManager

# Добавить в неудачно спарсенные
await ParsedManager.wrong.add("url/path", reason) 

# Добавить в те что удачно спарсились 
await ParsedManager.success.add("url/path")  

# Проверить, есть ли в неудачно спарсенных, 
if ParsedManager.wrong.is_exist("url/path"):
    pass  # This block is executed if the URL/path has been parsed before.

Для Синхронного метода методы аналогичные, только без await

В качестве аргумента функции принимают любые строки, в целом можно использовать и для других целей.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mangust228-0.8.2.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

mangust228-0.8.2-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file mangust228-0.8.2.tar.gz.

File metadata

  • Download URL: mangust228-0.8.2.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for mangust228-0.8.2.tar.gz
Algorithm Hash digest
SHA256 a6a1c5cf6e5128cfa8732c014a39c87ad3b29a3ffe248d320b26761349ad122a
MD5 1b9841b7e70927114103b4163448f40f
BLAKE2b-256 60f464a77e158699b2296efee7eba2e037a192e7d1b947fc08ceeac671e455b8

See more details on using hashes here.

File details

Details for the file mangust228-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: mangust228-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for mangust228-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f7ea80ca87117230ed28788b4e9d36f54625973614af0f81effb1ae628f477d3
MD5 3e358e0df6ad446b9b1d7c22c2890ff3
BLAKE2b-256 0f4b85a30496e995d61b07a75e0af19ddd74582984ffccf6377ba30b92e0812d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page