@xaxle12

Как сделать, чтобы парсер правильно обновлял данные и отправлял пользователю?

Бот парсит сайт, отправляет данные пользователю по запросу. Данные парсятся до отправки пользователю, они должны обновляться каждые n минут (я отказался от парсинга после запроса пользователя для того, чтобы не было много запросов на сайт, проще спарсить 1 раз, а потом отправить эти данные всем, кому они нужны). Проблема заключается в том, что не могу нормально настроить повторный парсинг. Скиньте пожалуйста пример кода (можно с print(data) в качестве примера).
while как я понял не подходит в данном случае, так как он просто будет парсить без остановки каждые n минут и так и не перейдёт к отправке данных пользователю

import requests
import telebot
from bs4 import BeautifulSoup as b

URL = 'site'
API_KEY = 'key'

r = requests.get(URL)
soup = b(r.text, 'html.parser')
data1 = soup.find_all('textarea', class_='form-control')
data2 = [c.text for c in data1 ]
s = ''.join(data2 )
data3 = s[38:]
data4=data3.split("\n")
part1, part2 = "\n".join(data4[:len(data4)//2]), "\n".join(data4[len(data4)//2:])
bot = telebot.TeleBot(API_KEY)


@bot.message_handler(commands=["start"])
def start(m, res=False):
    bot.send_message(m.chat.id, 'Type /now and get a list')


@bot.message_handler(commands=['now'])

def answer(message):
    bot.send_message(message.chat.id, part1)
    bot.send_message(message.chat.id, part2)
bot.polling()
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
goctio
@goctio
Дали мало данных для ответа, хоть бы пример кода оставили...

Насколько я понял, ваш бот работает в однопоточном режиме, и если запускаете цикл - он перестает выполнять остальные функции.

В этом случае поможет либо асинхронность, либо создание отдельного потока. В первом случае это создание бота на aiogram (не знаю для телеграма пишите или нет), во втором случае библиотеки Thread или Asyncio.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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