Блок Описание, или Description, или «О себе» имеется у каждого профиля, но некоторые пользователи ее просто не заполняют.
В прошлых уроках для получения информации о пользователе мы использовали метод .get_participants(), который возвращает TotalList со всеми участниками группы. У этого метода есть один серьезный недостаток: он не работает в группах с числом участников больше 4 000. Поэтому нам необходим другой метод, а именно .iter_participants(channel), который принимает в аргументы ссылку на группу.
Метод .iter_participants(channel) итерирует по участникам группы, сразу отдавая результат, поэтому это то, что нам нужно. Также следует отметить, что метод .get_me(), который возвращает информацию о пользователе, не имеет поля about, в котором хранится информация «О себе». Чтобы получить доступ к этому полю, нам потребуется импортировать еще один модуль, который работает с пользовательским профилем и имеет больше полей для работы с ними.
Импортируем:
from telethon.tl.functions.users import GetFullUserRequest
Синтаксис использования: client(GetFullUserRequest(user)) , где user — это ссылка на профиль пользователя.
Код ниже выполняет итерацию по всем участникам группы, и собирает информацию хранящуюся в поле «О Себе», с помощью атрибута about класса TelegramClient.
from telethon import TelegramClient, events, sync, connection from telethon.tl.functions.users import GetFullUserRequest r_api = 1111 r_hash = '' with TelegramClient('my', r_api, r_hash, system_version="4.10.5 beta x64") as client: users = client.iter_participants('name_group') for user in users: user_full_about = client(GetFullUserRequest(user)) print(user_full_about.full_user.about)
Давайте посмотрим на все поля атрибутов возвращаемого объекта у класса GetFullUserRequest(). Обратите внимание, что возвращаемый объект похож на объект из первого урока, только там он назывался User(), а тут название UserFull(), это нам красноречиво намекает на то, что UserFull() обладает расширенным количеством полей. Чтоб не повторяться, я выделил лишь те, которые отличаются от объекта User(). Для парсинга нам почти всегда нужно всего одно поле, about, с остальными вы можете познакомиться самостоятельно.
UserFull( user=User( id=2********2, is_self=True, contact=True, mutual_contact=True, deleted=False, bot=False, bot_chat_history=False, bot_nochats=False, verified=False, restricted=False, min=False, bot_inline_geo=False, support=False, scam=False, apply_min_photo=True, fake=False, access_hash=32**************2, first_name='Сергей', last_name=Сергеев, username='Name', phone=+7**** , photo=UserProfilePhoto( photo_id=9*************5, dc_id=2, has_video=False, stripped_thumb=b'\****\x08\x0b\xedA!9\xcf~\xd4QE+\xb1(\xa7\xd0'), status=UserStatusRecently(), bot_info_version=None, restriction_reason=[], bot_inline_placeholder=None, lang_code=None), settings=PeerSettings( report_spam=False, add_contact=False, block_contact=False, share_contact=False, need_contacts_exception=True, report_geo=False, autoarchived=False, invite_members=False, geo_distance=None), notify_settings=PeerNotifySettings( show_previews=None, silent=None, mute_until=None, sound=None), common_chats_count=3, blocked=False, phone_calls_available=True, phone_calls_private=False, can_pin_message=True, has_scheduled=False, video_calls_available=True, about='Описание профиля', profile_photo=Photo( id=9**************5, access_hash=5***********48, file_reference=b'\x00b\xa4\xea\xf3w&ji\xd0|\xf4\x10\xdc+\xfe\\<`\x1d\xbe',