如何使用电报中的telethon更快地下载大文件?

2024-04-25 20:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从电报频道下载大量文件 代码工作得很好,但它需要太长的时间,最重要的是我有一个缓慢的互联网连接 我有这个代码,我下载的文件重量为1gb,但它需要很长时间的一个例子,使下载速度更快

from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetHistoryRequest
import datetime
import os

def get_entity_data(entity_id, limit):
    entity = client.get_entity(entity_id)
    fecha = datetime.datetime.today()
    today = fecha.day
    yesterday = today - 1
    posts = client(GetHistoryRequest(
                   peer=entity,
                   limit=limit,
                   offset_date=None,
                   offset_id=0,
                   max_id=0,
                   min_id=0,
                   add_offset=0,
                   hash=0))
    for post in posts.messages:
        post_day = post.date.day
        if post_day >= yesterday:
            if post.media is not None:
                try:
                    file_name = post.media.document.attributes[0].file_name
                except:
                    file_name = post.media.document.attributes[1].file_name
                directorio = os.getcwd()+'/descargas'
                if os.path.exists('descargas/'+file_name) == False:
                    print(file_name, 'Descargando...')
                    client.download_media(message=post, file=directorio)
                    print('Archivo descargado.')

Tags: nameimportclientidtodaydatetimeifos
1条回答
网友
1楼 · 发布于 2024-04-25 20:13:21

我认为您可以通过减少limit和设置offset来处理它,并使用多线程请求,也许pool包可以帮助您实现这种方法。 例如,limit参数设置为10,并且存在您想要获取的1000个id,因此偏移量应该是offset = [0, 10, 20, 30, ..., 1000] 然后:

from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetHistoryRequest
import datetime
import os
import pool

offsets = [0, 10, 20, 30, ..., 1000]
pool.map(get_entity_data, offsets)

def get_entity_data(entity_id={your_id}, limit=10, offset_id=0):
    your function

相关问题 更多 >