fuckmylifecantsavethat
@fuckmylifecantsavethat

Ассинхронность при парсинге инстаграм аккаунтов для ботов в телеграм, как сделать?

Есть бот , который, с помощью библиотеки для инстаграм, принимает аккаунт и парсит аккаунты-подписчики и проверяет их на вхождение в бизнес аккаунты и смотрит, есть ли аватарка. Передо мной стоит задача ускорить парсинг и при этом обойти блокировку инстаграма за подозрительные действия. Можно ли сделать процесс прохода по циклу ассинхронным? Пишу на pyTelegramBotAPI, но не проблема переписать на aiogram. При проверке аккаунта с 50-100 подписчиками проблем с временем нет, но при большей нагрузке бот не справляется

from telebot import *
import instaloader
import time
import config

bot = telebot.TeleBot(config.token)

@bot.message_handler(commands=['start'])  # command handler for /start
def welcome(message):
    bot.send_message(message.chat.id,
                     'Добро пожаловать!\nОтправь мне никнейм Instagram—аккаунта, и я пришлю тебе его анализ'
                     '\nВнимание! Действует ограничение по времени (аккаунты можно присылать раз в 10 минут)')
@bot.message_handler(content_types=['text'])
def search(message):
    try:
        msg = message.text
        nickname = msg
        bot.send_message(message.chat.id, f'Анализ пользователя {nickname}'
                         f'\nПроцесс может занять некоторое время, пожалуйста, подождите')

        L = instaloader.Instaloader()
        L.login(config.nick, config.password)  # (login)

        # NICK FROM USER
        Profile = instaloader.Profile.from_username(L.context, nickname)

        # Create list of followers
        followers_list = []
        for followers in Profile.get_followers():
            followers_list.append(followers.username)

        bot.send_message(message.chat.id, f'Пользователь {nickname}'
                                          f'\nКоличество подписчиков: {len(followers_list)}')

        # Checking followers without pic
        followers_pic = []
        followers_no_pic = []
        for acc in followers_list:
            account = instaloader.Profile.from_username(L.context, acc)
            account.profile_pic_url
            followers_pic.append(account.profile_pic_url)
            # time.sleep(0.1)
        for no_pic in followers_pic:
            if "https://instagram" in no_pic:
                followers_no_pic.append(no_pic)
            else:
                pass
            # time.sleep(0.1)
        bot.send_message(message.chat.id, f'\nИз них без аватарок: {len(followers_no_pic)}')

        # Checking the list of subscribers on existing business accounts
        check_business = []
        for accounts in followers_list:
            business = instaloader.Profile.from_username(L.context, accounts)
            if business.is_business_account is True:
                check_business.append(business.is_business_account)
            else:
                pass


        bot.send_message(message.chat.id, f'\nБизнес-аккаунтов: {len(check_business)}')
        time.sleep(600)


    except:
        bot.send_message(message.chat.id, 'Не понял! Попробуй еще раз')


bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 316 просмотров
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
Не очень понял зачем тут асинхронность то, просто сделайте многопоточность, добавьте прокси, ну и если надо авторизуйтесь каким то аком в потоке чтобы снизить баны и увеличить лимиты
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы