Задать вопрос
Ответы пользователя по тегу Python
  • Как вставить переменную в re.sub?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Несколько вариантов решения задачи:
    import re
    
    text = "ab b b b"
    var = "b"
    
    text1 = f"[^a-z]{var}"
    print(re.sub(text1, "", text)) # ab
    
    text2 = "[^a-z]{}".format(var)
    print(re.sub(text2, "", text)) # ab
    
    text3 = "[^a-z]" + var
    print(re.sub(text3, "", text)) # ab
    
    text4 = "[^a-z]%s" % var
    print(re.sub(text4, "", text)) # ab

    P.S. Примеры выше не используйте при формировании sql запросов, для этого используйте параметризованные запросы (prepared statements), либо t строки (python>=3.14):
    text5 = t"[^a-z]{var}"
    print(re.sub(text5, "", text)) # ab
    Ответ написан
    Комментировать
  • Имеет ли жизнеспособность идея нового игрового движка на Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Может ли такой игровой движок иметь место быть и иметь популярность у инди разработчиков?

    По умолчанию, инди и другие небольшие проекты используют unity, для проектов покрупнее используют unreal engine. Да и как pet проект - сомнительная затея, все таки python - это не про написание игр.
    Ответ написан
    9 комментариев
  • Почему происходит Блокировка доступа при использовании Selenium для парсинга?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Использую официальный ChromeDriver (версия соответствует браузеру).

    Разумеется, в ином случае вы пришли бы с другой ошибкой.
    Скрипт имитирует человеческое поведение:
    Добавлены задержки между действиями.

    Между какими действиями?
    VPN и прокси не используются.

    Печально.
    Какие технические требования Ozon к автоматизированным запросам?

    Не selenium + имитация человеческих действий + нормальный прокси.
    Возможно ли получить API-доступ для таких задач?

    Для каких? https://docs.ozon.ru/api/
    Как легально реализовать сбор данных для личного использования?

    Только через открытый api, все остальное - нарушение закона.
    Ответ написан
    1 комментарий
  • Что лучше выбрать для интерфейса программы?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Первый, что лучше на сегодняшний день, веб или desktop.

    Если в рамках соц.сети - смотрите на успешных конкурентов, а у них:
    1. Веб: SPA/SSR (React/Vue).
    2. Мобильное приложение (Kotlin/Swift или Flutter).
    И второй вопрос, про то, что выбрать для пользовательского интерфейса: flet, HTML/CSS/JS, QT.

    - Или React/Vue + SCSS + (Django + DRF или FastAPI).
    - Или (если нет знаний современного фронта) то vanilla JS + SCSS + все это рендерить на бэке (Django или FastAPI) и отдавать посетителю готовые страницы.
    Собираюсь разработать пет-проект

    Пет-проект с целью чего? Если найти работу, то QT/Flet/Desktop + Python = экзотика в мире заказчика (в вакансиях или на фрилансе) вообще, и экзотика*100 в мире заказчика в соц.сетях и подобных проектах.
    будет намного производительней

    Python не про производительность.
    Ответ написан
    Комментировать
  • Как выбрать нужный ответ из JSON файла?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант (добавить проверок и исключений):
    ERRORS_FILE = 'error.json'
    IMAGES = 'error_images'
    
    error_data = {}
    
    with open(ERRORS_FILE, 'r', encoding='utf-8') as f:
        error_data = json.load(f)
    
    # Код бота:
    
    error_code = call.data
    error_description = error_data.get(error_code)
    
    # bot.send_message(call.message.chat.id, "Ошибка 501")
    bot.send_message(call.message.chat.id, f"Ошибка {error_code}: {error_description}")
    
    # photo = open('501.jpg', 'rb')
    image_path = os.path.join(IMAGES, f"{error_code}.jpg")
    with open(image_path, 'rb') as photo:
        bot.send_photo(call.message.chat.id, photo, caption=error_code)

    Так же, я бы подключал json файл 1 раз при запуске бота, а не каждый раз при нажатие его кнопок.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при парсинге bs4 как то надо нажать на кнопку "показать еще", чтобы подгрузило еще 20 постов?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как сделать, чтобы при парсинге bs4 как то надо нажать на кнопку

    Никак, bs4 как и requests лишь получают то, что отдал сервер при первом ответе. Вы можете попробовать исследовать то, какой запрос на сервер отправляется, при нажатие этой кнопки, а затем отправлять запросы из bs4 напрямую к этому серверу. А вообще, для таких задач (нажатие кнопок на сайте итп), используйте Selenium или CDP.
    так как я учусь пасингу в bs4

    А чего там учить?
    Ответ написан
    Комментировать
  • Как с помощью Selenium на Python найти элемент html страницы, который расположен в #shadow-root (open)?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    How to automate shadow DOM elements using selenium?

    Если коротко, то порядок следующий:
    1. Сначала нужно найти в основном dom тот элемент, к которому прикреплен shadow root.
    2. У п1. нужно получить свойство .shadow_root.
    3. И вот уже у п2. нужно вызывать его собственный метод find_element, чтобы найти нужный элемент внутри него.

    Или так:
    Локатор не находит элемент на сайте, хотя набран верно, пробовал разные варианты, не помогает, в чём проблема?
    Ответ написан
    3 комментария
  • Как работать с api сервиса на localhost?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    А я не хочу постоянно закидывать код на сервер что бы протестировать работает он или нет.

    Сурово!
    Как совместить локальную разработку и прием данных с внешнего сервиса?

    Как вариант, можно использовать обратный прокси по типу ngrok:
    1. Регаемся в ngrok и качаем их приложение.
    2. Указываем в ngrok, какой порт на локалке слушать, пусть будет :8080 ngrok http http://localhost:8080.
    3. Из консоли п2. копируем url обратного прокси, он будет похож на что то вроде https://9abc0-11-22-333-44.ngrok-free.app.
    4. Поднимаем свое приложение-сервер локально на порту из п2.
    5. В api сервиса указываем адрес из п3, например: https://9abc0-11-22-333-44.ngrok-free.app, с роутами из вашего приложения - это будет выглядеть примерно так:
    https://9abc0-11-22-333-44.ngrok-free.app/api/route-name
    .

    В результате, внешний api сервис сможет отправить данные в ваше приложение, которое запущенно у вас локально.

    P.S. запятые уже включены в тариф, используйте их иногда :)
    Ответ написан
    Комментировать
  • Почему Linux забил на --user-data-dir при запуске Selenium?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    А если прочитать ошибку? Один экземпляр хрома уже использует этот профиль. Кильните процесс и начните заново, а также оберните в try except сам код, а quit в finally, чтобы больше не оставалось висячих процессов.
    Ответ написан
  • Как проверять кодом наличие конкретно той или иной библиотеки?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    как проверять кодом есть ли нужная библиотека на пайтоне?

    В локальном окружении? Тогда примерно так:
    import importlib.util
    print(importlib.util.find_spec('kek') is not None) # False

    Check if Python Package is installed
    Ответ написан
    Комментировать
  • Как выполнить Olx парсинг номера?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    - Selenium не нужен, он легко определяется и слишком много жрет. Используйте Zendriver.
    - Используйте реалистичный отпечаток браузера.
    - Используйте мобильные прокси.
    - Используйте реалистичное движение курсором мыши или сенсорные действия (для смартфонов).
    - Нужна асинхронность? - запускайте Zendriver асинхронно, используя Asyncio.

    Обнаружат ли вас? Простая-средняя защита - нет, сложная да.
    Ответ написан
    Комментировать
  • Как анализировать востребованность технологии?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Обратил внимание, что последние пару лет все чаще слышу про fastapi, насколько он уже созрел на рынке? "Слышать" это одно (субъективщина, хайп и все такие), может есть какие-то метрики, как определять востребованность конкретной технологии относительно другой, например django и fastapi

    Я придерживаюсь 2х критериев для ЯП, которые используются в малых-средний проектах, это сайт с поиском работы (hh), и фриланс площадки. Вот инфа по hh на 10.03.2025:

    Без взаимоисключений:
    - Django: 184 вакансии.
    - FastAPI: 172 вакансии.

    Взаимоисключающие django и fastapi:
    - Django: 100 вакансий.
    - FastAPI: 89 вакансий.

    Всего пару лет назад FastAPI составлял 30% от django, сейчас же они сравнялись (тенденция на лицо), на фрилансе FastAPI так же часто мелькает, а учитывая, что это относительно django новая технология, то на него обязательно стоит обратить внимание, т.к. вполне вероятно, что его рост на рынке продолжится.

    FastAPI изначально идет практически голым по функциональности, в отличие от django, т.е. разработчик должен иметь более высокую квалификацию, чтобы выполнять те же самые задачи. Скорее всего, это отразится на стоимости конечного проекта, хотя и производительность проекта будет сильно больше.
    Ответ написан
    1 комментарий
  • Есть ли в питоне файл проекта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Нет такого, единственное что есть зрелое, так это pyproject.toml и poetry.lock (poetry), в котором описывается версия python и необходимых библиотек для текущего проекта. А от циклических импортов можно спастись лишь руками, заранее грамотно проектируя проект и вынося нужный функционал в модули и пакеты.
    Ответ написан
    1 комментарий
  • Как ускорить сканирование python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как варианты:
    1. Обязательно ли искать оранжевый индикатор во всей области изображения, а не в одном ожидаемом месте?
    2. mss.mss() - обязательно ли каждую итерацию захватывать экран заново?
    3. Преобразование в hsv точно нужно?
    4. time.sleep(0.05) # Проверяем цвет каждые 100 мс - что то не клеится в Ваших показаниях, на основание чего указано 50мс?

    Короче, профилировщик в зубы и бегом искать узкие места самостоятельно.
    Ответ написан
    1 комментарий
  • Как осуществить запрос к API с помощью Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Tenacity
    Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of retrying which is sadly no longer maintained.

    Под Вашу задачу, это будет выглядеть примерно так:
    import requests
    from tenacity import retry, stop_after_attempt, wait_fixed
    
    @retry(stop=stop_after_attempt(3), wait=wait_fixed(3))
    def fetch():
        res = requests.get("https://site.ru")
        # res = requests.get("https://site.ru", params={"key": "value"})
        if res.status_code != 200:
            raise requests.exceptions.HTTPError(res.status_code)
    
        data = res.json()
        return data
        # return data["link"]
    
    print(fetch())

    - wait=wait_fixed(3) - ждать 2 секунды между попытками.
    - stop=stop_after_attempt(3) - остановка после 3х попыток.
    Ответ написан
    Комментировать
  • Как запустить готовый чужой код на python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Скачать и установить python интерпретатор.
    2. Скачать репозиторий с кодом в нужную директорию.
    3. Открыть консоль и перейти в папку со скаченным проектом.
    4. Установить зависимости.
    5. Выполнить python код.

    Основные команды Pip для разработчиков Python
    Ответ написан
    Комментировать
  • Как посчитать сумму элементов в большом вложенном словаре?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting

    Выдаёт ошибку:
    Traceback (most recent call last):
    line 46, in
    for m in n.values():
    AttributeError: 'int' object has no attribute 'values'

    Метод values() у чисел? Может не стоит?
    Подскажите как посчитать сумму элементов в данном словаре

    А если глубина словаря изменится, опять все вложенные for переписывать? С рекурсией лучше выглядит:
    def best_function(d):
        sum = 0
        for v in d.values():
            if isinstance(v, dict):
                sum += best_function(v)
            else:
                sum += v
        return sum
    
    print(best_function(dct)) # 3906

    Ну и как правильно подметил Влад Григорьев - почему отладкой кода не занимаетесь? А если задача будет сложнее, например в 100 раз, 100 вопросов зададите?
    Ответ написан
    2 комментария
  • Google Chrome блокирует скачивание файла. Возможно ли отключить?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Вручную можно сделать через настройку "Разрешить сайтам показывать небезопасный контент" с указанием ссылки на web ui, но не понимаю как это можно реализовать в коде.

    Создайте профиль браузера, разрешите что нужно, затем запускайте selenium под этим профилем. Это костыль, но менее костыльный, чем другой.
    Ответ написан
    2 комментария
  • Почему в Python sqlite3 выводится из таблицы переменная вот так вот(3,)?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    fetchall() что возвращает? Вам же нужно вернуть данные по одному пользователю? Тогда используйте метод fetchone(), вместо fetchall():
    cursor.execute("SELECT dollars FROM users WHERE id=?", (message.from_user.id,))
    res = cursor.fetchone()
    if res:
        debet = res[0]
        await message.answer(f"Ваш айди: {message.chat.id}\nБаланс: {debet}")
    else:
        await message.answer("Не знаем таких.")
    Ответ написан
    Комментировать
  • Как проверить наличие поля в JSON файле с помощью python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Применять метод .get() к строке не лучшее решение, попробуйте так:
    for item in response.json()['Employees']:
        first_name = item["User"]["FullName"]["FirstName"]
        last_name = item["User"]["FullName"]["LastName"]
        
        if "MiddleName" in item["User"]["FullName"]:
            middle_name = item["User"]["FullName"]["MiddleName"]
        else:
            middle_name = "отчество отсутствует"
        
        print(f"Имя: {first_name}, фамилия: {last_name}, отчество: {middle_name}")
    
    
    # Имя: Иван, фамилия: Иванов, отчество: Иванович
    # Имя: Петр, фамилия: Петров, отчество: отчество отсутствует
    Ответ написан
    Комментировать