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

    Amigun
    @Amigun
    Джун : |
    Во-первых, убери у регистратора этого хендлера state=None, либо сделай его state="*".
    Во-вторых, к коду можно сильно придраться...
    if message.text == 'меню' or message.text == 'Меню':
    - серьезно? А если я напишу мЕнЮ?
    Ответ написан
    Комментировать
  • Как получить username пользователя в aiogram?

    Amigun
    @Amigun
    Джун : |
    @dp.message_handler(commands=['start'], state='*')
    async def start(msg: types.Message):
        await bot.send_message(msg.from_user.id, msg.from_user.first_name)
    Ответ написан
  • Как вставить переменную в sql запрос python?

    Amigun
    @Amigun
    Джун : |
    Отредактировано

    sql.execute(f"UPDATE users SET message = {random[0]} WHERE id = {user[0]};")
    db.commit()


    Если тип данных string, то нужно взять в кавычки:
    sql.execute(f"UPDATE users SET message = '{random[0]}' WHERE id = '{user[0]}';")
    db.commit()


    Во избежание sql-инъекций, лучше использовать следующий вариант:
    sql.execute("UPDATE users SET message = ? WHERE id = ?;", (random[0], user[0]))
    db.commit()
    Ответ написан
    8 комментариев
  • Как запустить файл с телеграм-ботом из другого .py файла?

    Amigun
    @Amigun Автор вопроса
    Джун : |
    Для тех, у кого возникнет такая же проблема, как и у меня. Вот как я ее решил:

    У меня была гипотеза о том, что bot_n.py отрабатывает все принты и закрывается. Чтобы в этом удостовериться, я написал bash скрипт, который открывал бы мне bot_n.py, а этот bash скрипт я запускал из своего main_bot.py по команде. У меня открывался терминал и сразу же закрывался.

    Оказывается, я забыл в bot_n.py дописать следующее:
    if __name__ == '__main__':
        executor.start_polling(dp)


    Теперь bot_n.py запускается, и бот работает. Но в это время не работает main_bot.py. Поэтому нужно добавить многопоточность. Вот и все.
    Ответ написан
    Комментировать
  • Как обойти капчу на Python?

    Amigun
    @Amigun Автор вопроса
    Джун : |
    Если у вас возникла такая-же проблема как у меня, а именно капча при парсинге сайта, то прочитайте как я её решил.

    Изначально я использовал библиотеки requests (для отправки запросов к сайту) и bs4 (для самого парсинга).
    Сначала я сделал задержку, если программа встречает капчу, то она останавливает свою работу на 1 час, и дальше продолжает работать. Это не сработало, ни через час, ни через два, ни через 3 дня.
    Дальше я думал подключить selenium, и когда выходит капча, открывать эту страничку с помощью selenium, там проходить капчу вручную, закрывать selenium, и пробовать через requests еще раз отправлять запросы на страницу. Капча все равно осталась.
    Переписать парсер под selenium - без использования requests и bs4, хорошее решение, но не всегда подходит. В моем случае было слишком муторно использовать это, поэтому я обратился сюда.
    Тут мне подсказали такой вариант: использовать сессии (requests.Session()) и очищать куки при смене IP (кстати да, я подключал библиотеки для смены IP через proxy, а так же библиотека для генерации fake-User-Agent) и передавать в заголовки параметр referer. Возможно это и работает, но не для меня. Капча все равно осталась.

    Ну и вот собственно само решение :)
    Я решил заменить библиотеку requests на selenium. Я через него подключался к сайту (у меня даже открывалось окно браузера) и с помощью метода page_source я получал html-код странички. Кстати, будьте внимательными, я так понял что с помощью этого метода можно получить только html, без js и css. Поэтому если сайт использует js для генерации контента, то у вас вряд-ли это получится. А потом, я просто с помощью bs4 парсил полученную html страничку, и извлекал из нее нужные мне данные. Да, капча все равно появлялась, но она появилась лишь однажды, я её вручную решил прямо через окно selenium, и можно сказать что я обошел капчу, так как она больше в процессе парсинга у меня не выскакивала.

    Можете попробовать все описанные выше способы, может что и поможет. С каждым сайтом нужно извращаться по своему)
    Ответ написан
    1 комментарий
  • Почему else - invalid syntax?

    Amigun
    @Amigun
    Джун : |
    У вас else относится к функции password.
    Ответ написан
  • Спарсил участников сообщества ВК. Как перебрать полученный response?

    Amigun
    @Amigun
    Джун : |
    Ответ ты получил в виде словаря, с ним можно работать как с обычным словарем (почитайте об этом подробнее в интернете).
    Зачем вы замахиваетесь сразу на парсер, если даже не знаете основ?
    В Эксель можно все вывести с помощью специальной библиотеки, предназначенной для этого.
    Ответ написан
    Комментировать
  • Как выдернуть весь текст из всех div с одинаковым классом?

    Amigun
    @Amigun
    Джун : |
    Через requests получаем нужную страничку:
    response = requests.get('тут_ваша_ссылка')
    Надеюсь, вы знаете как это делается.
    Дальше в бой идет bs4.
    soup = BeautifulSoup(response.content, 'lxml')
    Теперь создадим цикл for для перебора ВСЕХ (вы же этого хотели, да?) тегов, и будем выдергивать из них текст, если у него имеется нужный нам класс.
    for i in soup.recursiveChildGenerator():
    		if i.name:
    			if i.name == 'a':  # У вас на скрине показан тег a
    				try:
    					if i.attrs['class']:
    						if i.attrs['class'] == 'нужный_вам_тег':
    						# Если выше не работает, то попробуйте следующий вариант
    						# if i.attrs['class'] == ['нужный_вам_тег']:
    							return i.text
    						else:
    							pass
    				except KeyError:
    					pass


    По идее, это должно работать, но я не тестировал это на вашем сайте.
    Пробуйте, делайте.
    Если что подробнее можете почитать тут
    Ответ написан
    Комментировать
  • BS не видит классы при парсинге?

    Amigun
    @Amigun
    Джун : |
    Не могу утверждать, но возможно те данные, которые тебе нужны, добавляются на страницу динамически.
    Библиотека requests получает лишь код странички, а с динамическими данными работать не может.
    Как это проверить? Через тот же requests скачай запрашиваемую страничку и изучи её.
    Если моя теория верна, то смотри в сторону selenium.
    Ответ написан
    Комментировать
  • Где взять многопоточный python прокси чекер?

    Amigun
    @Amigun
    Джун : |
    1. Открываешь любой сайт с прокси
    2. Парсишь все прокси через bs4
    3. Через requests пробуешь подключиться к каждому из них
    4. Смотришь что он тебе выдает. Если подключился - значит прокси живой. Если нет - то нет.

    Если тебе нужна многопоточность, библиотека потоков threading тебе в помощь!
    Ответ написан
    Комментировать
  • Как упомянуть в сообщении участника беседы через vk Api?

    Amigun
    @Amigun
    Джун : |
    Есть два способа упомянуть пользователя в беседе:
    [id_user|name] или *id_user он же @id_user
    Просто отправляете сообщение с таким содержанием: @id_user (Эй, Вася)
    Вуаля!
    Ответ написан
    Комментировать
  • Как сделать чтобы время показывалось в смайликах?

    Amigun
    @Amigun
    Джун : |
    Как изменить библиотеку я не знаю, но попробуй так.

    1 = КОД_СМАЙЛИКА_ЦИФРЫ_1
    2 = КОД_СМАЙЛИКА_ЦИФРЫ_2
    3 = КОД_СМАЙЛИКА_ЦИФРЫ_3
    colon = : #двоеточие
    и тд
    if 21:57 #нынешнее время, допустим
    print('2' + '1' + 'colon' + '5' + '7'

    #и прописать так все возможное время (от 00:00 до 23:59)
    Ответ написан