Вывод результатов фунции в бота

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. Нужно вывести результаты парсинга в бота телеграм. Сам скрипт работает и выдает результат в консоль как надо.
Python:
def get_pair():
    main_div = get_main_div()
    class_lines = main_div.find_all('div', class_='class-lines')

    for i in class_lines:
        day = i.previous_element
        yield '**********************\n'
        yield day
        yield '----------------------'

        class_tails = i.find_all('div', class_='class-tails')

        for pair in class_tails:
            # время начала пары
            time_ = pair.find('div', class_='class-time').text
            # print(time_)
            yield time_

            for p in pair.find_all('div', class_='class-tail'):

                if 'class-all-week' in p.attrs['class']:
                    week = 'Общая неделя'
                    # print('  Общая неделя')

                elif 'class-even-week' in p.attrs['class']:
                    week = 'Четная неделя'
                    # print('  Четная неделя')

                elif 'class-odd-week' in p.attrs['class']:
                    week = 'Нечетная неделя'
                    # print('  Нечетная неделя')

                if p.text == 'свободно':
                    data = (week, 'Время свободно')

                else:
                    # предмет
                    subject = p.find('div', class_='class-pred').text
                    # аудитория
                    room = p.find('div', class_='class-aud').text
                    # лекция/практика
                    variant = p.find_all('div', class_='class-info')[0].text
                    # преподаватель
                    coach = p.find_all('div', class_='class-info')[-1].find('a').text

                    data = (week, subject, room, variant, coach)

                yield data

get_main_div() возвращает див, с которого начинается парсинг, он меняется в зависимости от четности/нечетности недели, поэтому вынес это в отдельную функцию. если скрипт запускать в консоли print(get_pair()) , то отрабатывает норм. теперь задача запихать вывод фунции в бота телеграм. но телега не понимает generator и поэтому падает с ошибкой
Код:
aiogram.utils.exceptions.CantParseEntities: Can't parse entities: unsupported start tag "generator" at byte offset 0

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

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
может быть кому-нибудь будет интересно, решил таким образом: результатом функции
get_pair() есть генератор, его значения построчно разобрал в цикле for, где удалил все скобки/кавычки/зпт и добавил пробелы для наглядности, все это дело сохранил в list, а его построчно записал в тхт, а в боте открыл этот тхт и лупанул одним выводом. получилось норм.
Python:
result_list = []
result = get_pair()
for r in result:
    r = str(r)
    r = r.replace("('", '')
    r = r.replace("', '", '  ')
    r = r.replace("')", '')
    result_list.append(r)
with open('result.txt', 'w', encoding='utf8') as file:
    for el in result_list:
        file.write(el)
        file.write('\n')
 

Форум IT Специалистов