Не полностью парсит пользователей открытой группы в Телеграме (Telethon)

Рейтинг: 1Ответов: 0Опубликовано: 05.06.2023

Как мы знаем есть лимит на получение списка пользователей в размере 10к (Telethon), но у меня проблема в другом, когда запускаю скрипт по парсингу нескольких групп, то в группе размером ~6к забирается только ~4.5к, в некоторых группах вообще по 3-4 человека из ~5к.

В чем может быть проблема?

Ссылка на полный файл на GitHub

async def main(client):
with open("configurations/groups_members.txt") as file:     # Открываем файл со списком групп для парсинга
    group_href = file.read().split(", ")

con = sqlite3.connect("logs/member_list.db")    # Открываем db файл для записи спарсеных данных
cur = con.cursor()

# Проходим циклом по ссылкам групп в открытом выше файле
for item_group in group_href:  
    namegroup = item_group.replace('https://t.me/', '')
    cur.execute(f"CREATE TABLE IF NOT EXISTS {namegroup}(username TEXT,userid TEXT);")  # Создаем таблицу под каждую группу
    
    chat_entity = await client.get_entity(item_group)   # Получаем сущность для парсинга
    offset = 0

    # Цикл для парсинга, сделан по гайдам, смещение offset каждые 200 пользователей
    while True:
        participants =  await client(GetParticipantsRequest(chat_entity, filter=ChannelParticipantsSearch(q=""), offset=offset, limit=200, hash=200))
        if not participants.users:
            break
        
        # Костыльная, но рабочая запись спарсшеных данных
        for user in participants.users:
            members_str_username.extend((user.username, user.id))
            cur.execute(f"INSERT INTO {namegroup} VALUES(?, ?);", members_str_username)
            members_str_username.clear()
        offset += int(len(participants.users))
    
con.commit()    # Закрываем SQL

Ответы

Ответов пока нет.