Как сделать асинхронный парсер рабочим?

Рейтинг: 0Ответов: 1Опубликовано: 27.01.2023

Здоров. Есть следующий код на aiogram:

import asyncio
from aiogram import Bot, Dispatcher, types
import config
import sqlite3
import requests
from bs4 import BeautifulSoup as BS
import time
import logging

bot = Bot(config.TOKEN, parse_mode="HTML")
dp = Dispatcher(bot)
db = sqlite3.connect('db.db', check_same_thread=False)
cursor = db.cursor()

logging.basicConfig(level=logging.INFO)

def1 = ''
async def pollling(wait_for):
    while True:
        global def1
        r = requests.get("https://tsn.ua/news")
        soup = BS(r.content, 'html.parser')
        site = soup.find("h3", class_="c-card__title")
        link = soup.find("a", class_="c-card__link")
        qwe = link.get("href")
        if def1 == site.text:
            pass
        else:
            def1 = site.text
            result = cursor.execute("SELECT `user_id` FROM `tbl` WHERE `tsnall` = ?", (1,)).fetchall()
            xd = len(result)
            for y in range(xd):
                asd = str(result[y])
                ac = asd[1 : -2]
                await bot.send_message(ac, (f'{site.text} \n {qwe}'))
        await asyncio.sleep(wait_for)

#handlers

async def main():
    task1 = asyncio.create_task(pollling(10))
    await task1
    await dp.start_polling(bot)

if __name__ == '__main__':
    asyncio.run(main())

По идее бот должен асинхронно парсить свежие новости с сайта и отвечать на запросы пользователя, но при запуске он только парсит сайт. В самом коде хендлеры конечно же есть, решил не тратить буквы. Подскажите как исправить код.

Ответы

▲ 0Принят

await task1 убирай и оно заработает