• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Парсер данных из Telegram чатов на Python

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
API библиотеки изменились, теперь это делается еще проще, с помощью всего одного метода iter_chat_members()
 

lil_nazik

Новичок
Сообщения
2
Реакции
0
0 руб.
возможно я что то не так делаю но у меня не работает
вот ошибка:
File "E:\Nazar\Project\Python\Telegram Parser\Parser2\Parser.py", line 57, in <module>
main()
File "E:\Nazar\Project\Python\Telegram Parser\Parser2\Parser.py", line 51, in main
with app:
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyrogram\client\client.py", line 222, in __enter__
return self.start()
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyrogram\client\client.py", line 825, in start
is_authorized = self.connect()
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyrogram\client\client.py", line 261, in connect
self.load_session()
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyrogram\client\client.py", line 1462, in load_session
self.storage.open()
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyrogram\client\storage\file_storage.py", line 107, in open
self.conn = sqlite3.connect(str(path), timeout=1, check_same_thread=False)
sqlite3.OperationalError: unable to open database file
и вот код
import time
import json
from pyrogram import Client
from pyrogram.errors import FloodWait

app = Client('session', workdir='./session') # Настройки сессии клиента
chat = '' # Название чата или его ID
string_format = '' # Формат строки для записи

def parser(id):
""" Функция парсинга пользователей """
members = []
offset = 0
limit = 200

while True:
try:
chunk = app.get_chat_members(id, offset)
except FloodWait as e:
time.sleep(e.x)
continue
if not chunk.chat_members:
break

members.extend(chunk.chat_members)
offset += len(chunk.chat_members)

return members

def template(data, template):
""" Функция нормализатора строк """
data = json.loads(str(data))
data['user'].setdefault('first_name', '-')
data['user'].setdefault('last_name', '-')
data['user'].setdefault('username', '-')
data['user'].setdefault('phone_number', '-')
return template.format(id=data['user']['id'],
first_name=data['user']['first_name'],
last_name=data['user']['last_name'],
username=data['user']['username'],
phone_number=data['user']['phone_number'],
status=data['status'])

def wfile(data, template_format, path):
""" Функция записи строк в файл """
with open(path, 'w', encoding='utf8') as file:
file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
file.writelines([template(user, template_format) for user in data])

def main():
with app:
data = parser(chat)
wfile(data, string_format, './chats/{0}.txt'.format(chat))
print('Сбор данных закончен!')

if __name__ == '__main__':
main()
 

deathast

Новичок
Сообщения
3
Реакции
0
0 руб.
Вы файл config.ini создали?
И во вторых у вас string_format пустой, задайте туда формат строки.
Еще у меня chunk - это сразу лист, и вызов атрибута chat_members не требуется.
Например string_format = 'ID: {id} \n'
Пример кода, который у меня заработал

Python:
import time
import json
from pyrogram import Client
from pyrogram.errors import FloodWait

app = Client('session', workdir='./session')  # Настройки сессии клиента
chat = 'BinanceRussian'  # Название чата или его ID
string_format = '{id}\n'  # Формат строки для записи

def parser(id):
    """ Функция парсинга пользователей """

    members = []
    offset = 0
    limit = 200
    while True:
        try:
            chunk = app.get_chat_members(id, offset)
            print(chunk)          

        except FloodWait as e:
            time.sleep(e.x)
            continue

        if not chunk:
            break

        members.extend(chunk)
        offset += len(chunk)
    return members

def template(data, template):
    """ Функция нормализатора строк """

    data = json.loads(str(data))
    data['user'].setdefault('first_name', '-')
    data['user'].setdefault('last_name', '-')
    data['user'].setdefault('username', '-')
    data['user'].setdefault('phone_number', '-')
    return template.format(id=data['user']['id'],
                           first_name=data['user']['first_name'],
                           last_name=data['user']['last_name'],
                           username= '@'+data['user']['username'],
                           phone_number=data['user']['phone_number'],
                           status=data['status'])

def wfile(data, template_format, path):
    """ Функция записи строк в файл """

    with open(path, 'w', encoding='utf8') as file:
        #file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
        file.writelines([template(user, template_format) for user in data])
       
def main():
    with app:
        data = parser(chat)
        wfile(data, string_format, './chats/{0}.txt'.format(chat))
        #text = '''ПРИВЕТ'''
        #Отправка сообщений пользователям, но меня быстро банили, возможно из-за того, что акк свежий  
        '''
        mess=0
        f = open("chats/{0}.txt".format(chat))  # Чтение из файла построчно
        line = f.readline()
        while line:
            try:
                app.send_message(int(line), text)
                mess +=1
                print ('Отправил сообщений: {mess}, последнее для {line}'.format (mess=mess, line=line))
                line = f.readline()
                time.sleep(1)

            except FloodWait as e:
                time.sleep(e.x)
                continue

        f.close()
        '''
        print('Сбор данных закончен!')
       
if __name__ == '__main__':

    main()
привет пишет ошибку-
Traceback (most recent call last):
File "C:\Users\andre\main.py", line 82, in <module>
main()
File "C:\Users\andre\main.py", line 55, in main
with app:
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\client.py", line 249, in __enter__
return self.start()
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\sync.py", line 56, in async_to_sync_wrap
return loop.run_until_complete(coroutine)
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 642, in run_until_complete
return future.result()
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\methods\utilities\start.py", line 53, in start
is_authorized = await self.connect()
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\methods\auth\connect.py", line 39, in connect
await self.load_session()
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\client.py", line 669, in load_session
await self.storage.open()
File "C:\Users\andre\AppData\Local\Programs\Python\Python39\lib\site-packages\pyrogram\storage\file_storage.py", line 107, in open
self.conn = sqlite3.connect(str(path), timeout=1, check_same_thread=False)
sqlite3.OperationalError: unable to open database file
 

German182

Новичок
Сообщения
1
Реакции
0
0 руб.
А можете подсказать как парсить большее 10000 участников и как парсить с пабликов или закрытых каналов?
 
Сверху Снизу