Задать вопрос
  • Как научить чатбота предоставлять определённую информацию по запросу?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    • Отложить бота на полгода
    • Скачать «Изучаем Python» М.Лутца 1-й том и начать прорабатывать
    • После проработки хотя бы половины тома начать сочинять свой вариант 2048 или Змейку.
    • Вернуться к боту.
    Ответ написан
    Комментировать
  • Как найти одно изображение на другом изображении?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    2 комментария
  • Почему не получается создать объект на базе класса?

    longclaps
    @longclaps
    У вас в огороде бузина, а в Киеве - дядька.
    Откуда ваш Python 3.6.1 Shell знает, что вы изучаете Python и даже написали класс Stuff?
    Ответ написан
    Комментировать
  • Как запланировать действие в python?

    @antares4045
    Вопрос из заголовка: библиотека shedule
    Вопрос из текста вопроса: библиотека Threading+sleep
    По факту, сделайте лучше формулу, которая вычисляет исходя из текущей даты, даты когла вычислялась формула последний раз и значения этой формулы при прошлом расчёте. Сохраняйте дату и прошлое значение и обновляйте, когда поьзователь интересуется. Такой подход сбережет вам куууучу вычислительных ресурсрв
    Ответ написан
    2 комментария
  • Что делать с requests что тут не так и как исправить код для discord.py?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Читать учебник по Python прежде, чем браться за ботов. Судя по вопросу, вы даже самых основ не знаете.
    Ответ написан
    3 комментария
  • Срабатывает не тот if который должен, что не так?

    @lob4Noff
    Оператор input() имеет строчный тип данных, и он сравнивает значение первых символов. Чтобы ввести именно число (не строку), "оберните" input() в int():

    import random
    
    a = int(input("Введите ОТ скольки рандомизировать: "))
    b = int(input("Введите ДО скольки рандомизировать: "))
    
    if b > a:
        c = random.randint(a, b)
    else:
        c = random.randint(b, a)
        print ('Правильный порядок ОТ и ДО, а не ДО и ОТ как сделали вы! Но число всё равно сгенерировано')
    print (c)
    Ответ написан
    1 комментарий
  • Как взаимодействовать с символами, если они в текстовом блокноте?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Господи, ну почему никто даже элементарной книги не читает?
    Ты работаешь со строковым типом данных, а надо с целочисленным.
    Приведи один тип в другой и будет тебе счастье.
    До следующей проблемы
    Ответ написан
    Комментировать
  • Как перевести из десятичной системы в двоичный вид с определенным кол-вом символов?

    solotony
    @solotony
    покоряю пик Балмера
    zfill спасет молодого программиста

    >>> bin(777)[2:].zfill(22)
    '0000000000001100001001'


    хотя я бы просто использовал format

    >>> format(777, '022b')
    '0000000000001100001001'
    Ответ написан
    Комментировать
  • Как решить проблему с multiprocessing?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Во-первых, стоит определиться всё-таки многопоточно или multiprocessing. Во-вторых, ваш синхронный код скорее всего расположен на верхнем уровне исходного кода, а потом выполняется, когда multiprocessing создаёт новые процессы скрипта.
    Ответ написан
    4 комментария
  • Расширение таблицы при парсинге?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В общем, рассказываю про парсинг.

    Код, который видно на странице через инспектор элементов в браузере - это код, который браузер подготовил для пользователя. Открываете сайт - браузер отправлять запрос на сервер. Запрос состоит из метода, пути, заголовков и тела. После первоначального запроса браузер получает от сервера HTML страницу, в которую включено (обычно) множество JS скриптов, которые в процессе выполнения могут создавать дополнительные запросы на сервер для получения дополнительной информации. После выполнения всех действий, пользователь видит в браузере готовый результат, который отличается от первоначального запроса из-за дополнительных джаваскриптов.

    Если элемент (класс, id, и тд) видно в инспекторе браузера - это не означает, что элемент присутствовал при первоначальном запросе. Чтобы увидеть тот код, который браузер получает первоначально (тот самый код, который вы получите через requests, curl итд) - нужно нажать CTRL+U, либо правой кнопкой -> просмотр кода страницы
    Это - тот самый код, который вы получаете, и все данные нужно искать только в нем, это дает гарантию того, что нужный вам элемент будет присутствовать при выполнении запросов через ЯП.

    Если нужного элемента нет на странице, значит он загружен каким нибудь JS скриптом. Здесь будут два варианта:
    1. JS отправляет дополнительный запрос на сервер, получает нужные данные и вставляет их в HTML.
    2. Данные создаются внутри JS скрипта без запросов (очень маловероятно)

    Если данные появляются в результате дополнительного запроса, то нужно просто повторить этот запрос.

    Чтобы понять, что нужно - нужно воспользоваться любым сниффером трафика. Самое простое - встроенный в браузер логгер запросов. F12 -> Network.
    6124fec4cfd69347854863.png
    Обычно достаточно поставить фильтр на XHR.
    Если есть под рукой Fiddler, то тоже сгодится. Ну и Burp / ZAP как вариант (но очень жирно).

    Алгоритм будет примерно таким:
    1. Открываем вкладку Network
    2. Очищаем историю запросов (если есть)
    3. Желательно поставить галочку "Preserve log", чтобы история не пропадала.
    4. Обновляем страницу. Если контент подгружается при прокретке / по нажатию кнопки - крутим / нажимаем и тд.
    5. Теперь можно нажать CTRL+F все в той же вкладке Network и вписать искомый текст (допустим название товара).
    6. Слева будут те запросы, которые содержат эту подстроку. Теперь нужно просто пощелкать по ним, найти нужный, посмотреть из чего он состоит и повторить его через requests.

    Нужно обратить внимание на заголовки и тело запроса. Не редко при загрузке доп. информации в тело запроса так же передается указатель текущей страницы, или индекс элемента, с которого начинается новый список. Так же в заголовки могут добавиться дополнительные. Например, csrf token, либо X-Requested-With. Если повторение запроса не принесло желанный результат - стоит проверить заголовки и тело еще раз. Если сайт загружает данные при нажатии на кнопки, прокрутке страницы и тд - алгоритм тот же.

    Делюсь хорошим сайтом, который увидел тут: https://curl.trillworks.com/
    Копируете свой запрос как CURL
    612500b91076a776091384.png
    Затем вставляете на сайт. Он выдаст готовый код на Python. Но нужно понимать, что это автоматический процесс и он не всегда выдает правильный результат. В частности, преобразование application/json тела довольно неправильно. Но для копипаста некоторых заголовков подходит вполне. В общем сайтом пользоваться можно, но и самому думать тоже нужно

    Из хороших программ - Postman. Позволит легко и быстро составлять запросы, есть экспорт в Python код. Советую, если запросы довольно тяжелые, чтобы составлять их "наживую".

    Краткая выжимка:
    1. Код через инспектор браузера != коду с запроса requests / curl.
    2. Скорее всего нужные вам данные подгружаются доп. запросами, ищутся через любой мониторинг трафика.
    3. Следите за телом и заголовками запроса. Заголовки, даже самые незначительные, могут влиять на конечный результат.
    4. Старайтесь всегда в заголовки добавлять User-Agent

    Если данные грузятся без доп запросов, лежат в неизвестном формате, или просто лень разбираться - используйте Selenium. Он является таким же браузером, но только с возможностью контролировать его работу
    Ответ написан
    3 комментария
  • Как установить МонгоБд на хероку?

    ScriptKiddo
    @ScriptKiddo
    Возможно, установить pymongo, как и предлагают.

    To fix this error install pymongo with the srv extra...
    python -m pip install "pymongo[srv]"
    Ответ написан
    1 комментарий
  • Async def в библиотеке дискорд.Py?

    SoreMix
    @SoreMix
    yellow
    Это весь код? На команды должен вешаться декоратор @bot.command()
    Пример висит в разделе Bot Example https://github.com/Rapptz/discord.py
    Ответ написан
    7 комментариев
  • Как использовать endswith в условии?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Двоеточие пропущено. Новичку стоит почитать учебник, чтобы освоить базовый синтаксис хотя бы.
    Ответ написан
    Комментировать
  • Как брать новости на python?

    @MEDIOFF
    Python Developer
    Написать парсер новостей с медузы и назвать его news.py
    Ответ написан
    Комментировать
  • Как создать несколько команд?

    @UberPool
    Python/JS coder
    Используй декоратор client.command()
    Пример команды:
    @client.command()
    async def send_text(ctx):
         await ctx.send('test')
         #...more
    Ответ написан
    2 комментария
  • Как убрать конкретный текст из переменной на python?

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

    Арендовать сервер и запустить код на нём.
    Если совсем без привязки к железу, то можешь попробовать какой-нибудь serverless, типа Yandex Cloud Functions или AWS Lambda
    Ответ написан
    Комментировать
  • Возможно установить Debian без монитора?

    @Drno
    вставьте диск в другой ПК, поставьте дебиан+ssh. переставьте диск
    IP дебиан после загрузке можете посмотреть в dhcp своего роутера
    Ответ написан
    Комментировать
  • Как написать код так что бы после покупки личной роли/комнаты бот выдавал всё автоматически?

    x4zx
    @x4zx
    python developer
    Не важно новичок вы или профи, если возникла необходимость то требуется прочитать документацию, а также не маловажным является знание языка на котором пишите бота.

    Могу помочь лишь с частью кода:

    @client.command()
    async def addrole(ctx, *, member: discord.Member = None):
        guild = bot.get_guild(ctx.guild.id)
        role1 = guild.get_role(ID роли которую хотите выдавать)
        if member is None:
                await ctx.reply('Укажите пользователя, которому хотите выдать роль.')
            else:
                await member.add_roles(role1)
                await ctx.reply(f'Вы успешно выдали роль...')
    Ответ написан
    4 комментария