Не полностью парсит пользователей открытой группы в Телеграме (Telethon)
Как мы знаем есть лимит на получение списка пользователей в размере 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
Источник: Stack Overflow на русском