Задать вопрос
Ответы пользователя по тегу Python
  • Что лучше выбрать для интерфейса программы?

    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 комментария
  • Почему 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}")
    
    
    # Имя: Иван, фамилия: Иванов, отчество: Иванович
    # Имя: Петр, фамилия: Петров, отчество: отчество отсутствует
    Ответ написан
    Комментировать
  • Как проверить в списке чисел наличие числа, содержащего цифру 3?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    nums = list(map(int, input("Введите числа: ").split()))
    
    if any('3' in str(n) for n in nums):
        print("Найдено")
    else:
        print("Не найдено")
    Ответ написан
    Комментировать
  • Как выйти из бесконечной работы браузера при парсинге через Selenium?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Нейронка это конечно хорошо, но желательно проверять, что она пишет:
    # EC.presence_of_element_located((By.CSS_SELECTOR, "product-slider__img js-product-current-img"))
    EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))

    Ниже код для Chrome и FF (Python 3.10, Windows 11 Pro 23H2) - все прекрасно работает, за исключением сайта-помойки, который грузится минуту:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    options = Options()
    service = Service(r'D:\project\chromedriver-130.0.6723.93.exe')
    driver = webdriver.Chrome(service=service, options=options)
    
    url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
    driver.get(url)
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
        )
        page_html = driver.page_source
        print(page_html)
    
    except TimeoutException:
        print("Элемент не найден")
    
    finally:
        print('Программа завершена')
        driver.quit()

    from selenium import webdriver
    from selenium.webdriver.firefox.service import Service
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    options = Options()
    service = Service(r'D:\project\geckodriver.exe')
    driver = webdriver.Firefox(service=service, options=options)
    
    url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
    driver.get(url)
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
        )
        page_html = driver.page_source
        print(page_html)
    
    except TimeoutException:
        print("Элемент не найден")
    
    finally:
        print('Программа завершена')
        driver.quit()

    672b4890b03b0937030403.png
    Ответ написан
    2 комментария
  • Как правильно воспользоваться документацией API к сайту и исполнить методы в Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Получить your_secret_key, скорее всего в ЛК этого сайта.
    2. Вставить из примера ссылку в браузер и перейти, подставив вместо your_secret_key полученный ключ из п1, вместо остальных - в API руководстве написано, что нужно.
    3. В результате, "в браузер вернется json объект" с данными от сервера, которые так же указаны в API руководстве.

    4. Затем, пишем Python код, будем использовать синхронный requests (как самый простой):
    import requests
    
    # Подставить нужные данные из API руководства
    params = {
        'key': '?',
        'hash_name': '?',
        'id': '?',
        'price': '?',
    }
    
    # GET запрос на сервер, аналог того, что мы использовали в браузере из п2.
    response = requests.get('https://rust.tm/api/v2/buy', params=params)
    
    # Печатаем результат запроса, аналог того, что мы использовали в браузере из п3.
    print(response.json())
    
    # В консоль распечатается приблизительно это:
    
    # {
    #   "success": true,
    #   "id": "136256960"
    # }
    
    # Затем нужно циклом обойти результат с сервера и уже на основание полученных данных - предпринять необходимые действия. Например, пойти пожрать, чем я сейчас как раз и займусь... ;)

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

    P.P.S. код, ошибки и ссылки на api нужно писать текстом, а не скринами, не нарушайте правила сервиса!
    Ответ написан
    1 комментарий
  • Как ускорить обработку POST запроса Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    8-10 секунд уходит, это не дело, как можно исправить?

    Переписать сервер, код которого Вы разумеется не предоставили.
    Ответ написан
    1 комментарий