Проблема с циклом while True в Python

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

Проблема с циклом while True у меня есть функция get_lalafo которая парсит данные с сайта и возвращает его в виде dict там работает асинхронность asyncio

В главном файле main я вызываю get_lalafo в виде бесконечного цикла while True который постоянно должен присылать в группу телеграм новые объявления если они появятся. Но у меня только в один раз присылает а если появляются новые объявления он их не присылает. Я так думаю что та внутри цикла не правильно работает раз не присылает

Вот код:

from config.telegram_config.TOKEN_telegram import TOKEN
from parsing_lalafo import get_lalafo
import telebot

bot = telebot.TeleBot(TOKEN, parse_mode=None)
name_channel = '@akkondiokm'  # здесь указывается группа

proverka = {'NEW_URl': None }

while True:
    current_internal_url = get_lalafo['URL_INTERNAL']
    
    if proverka.get('NEW_URl') != current_internal_url:
        bot.send_message(name_channel, 
        f'''📌Название: {get_lalafo['title']}\n'''
        f'''🔎Адрес: {get_lalafo['adress']}\n'''
        f'''💰Цена: USD {get_lalafo['price']}\n'''
        f'''✍Описание: {get_lalafo['description']}\n'''
        f'''Фото: {get_lalafo['image_urls']}\n'''
        f'''Ссылка на обьявление: {current_internal_url}\n'''
        )
        proverka['NEW_URl'] = current_internal_url

в get_lalafo этот код:

from bs4 import BeautifulSoup
import urllib.parse
# import pandas as pd
import asyncio
import aiohttp
# pd.options.display.max_colwidth = None


URL = "https://lalafo.kg/bishkek/kvartiry/arenda-kvartir/dolgosrochnaya-arenda-kvartir/property-host?price[to]=30000&currency=KGS&sort_by=newest"

# это функция получает данные из сайта 
async def get_html(URL: str):
    async with aiohttp.ClientSession() as session:
        async with session.get(URL) as resp:
            return await resp.text()

all_data = {'URL_INTERNAL': None,
            'title': None,
            'adress': None,
            'description': None,
            'userName': None,
            'data_create': None,
            'data_update': None,
            'price': None,
            'phone': None,
            'image_urls': None,
            'gif_name': None,
            }

async def get_content() -> list:
    soup_general = BeautifulSoup(await get_html(URL), "html.parser")
    ads = []
    for el in soup_general.select('article.adTile-wrap'):
        if el.select('.badgePaidFeature'):
            continue
        urls = urllib.parse.urljoin(URL, el.select_one('a.adTile-title')['href'])
        ads.append(urls)

    all_data['URL_INTERNAL'] = ads[0]

    soup = BeautifulSoup(await get_html(all_data['URL_INTERNAL']), "html.parser")
    items = soup.find('div', class_='details-page__wrapper container') # главный класс к которуму мы обращаемся
    all_data['title'] = (items.find('h1', class_='Heading secondary-small')
                                .text
                                )

    try:
        all_data['adress'] = (items.find('a', class_='LinkText primary-black extra-small')
                        .text
                        )
    except:
        all_data['adress'] = None

    if len(items.find('div', class_='description__wrap')
                                            .text
                                            ) == 0:
        all_data['description'] = 'Запися нету'
    else:
        all_data['description'] = (items.find('div', class_='description__wrap')
                                            .text
                                            )
                  
    all_data['userName'] = (items.find('span', class_='userName-text')
                                    .text
                                    )

    all_data['data_create'] = (items.find_all('span', class_='text-inline small')[1]
                                    .text
                                    )

    all_data['data_update'] = (items.find_all('span', class_='text-inline small')[3]
                                        .text
                                        )

    all_data['price'] = (items.find('span', class_='heading')
                                .text
                                )

    try:
        all_data['phone'] = (items.find('a', class_='linkButton medium secondary')
                                    .get('href')
                                    ).split(':')[1]
    except:
        all_data['phone'] = None

    try:
        all_data['image_urls'] = (items.find('div', class_='carousel__img-wrap')
                                    .select('source')[1]
                                    .get('srcset')
                                    )
    except:
        all_data['image_urls'] = None

    all_data['gif_name'] = (items.find('div', class_='about-ad-info__id')
                                    .text
                                    ).split(" ")[1]
    return all_data

async def main():
    data = asyncio.create_task(get_content())
    return await data

get_lalafo = asyncio.run(main())

если вывести print(current_internal_url) введите сюда описание изображения

вот обновленный код:

from config.telegram_config.TOKEN_telegram import TOKEN
from parsing_lalafo import main
import telebot
import asyncio

bot = telebot.TeleBot(TOKEN, parse_mode=None)
name_channel = '@akkondiokm'  # здесь указывается группа

proverka = {'NEW_URl': None}
while True:
    get_lalafo = asyncio.run(main())
    # print(current_internal_url)
    if proverka.get('NEW_URl') != get_lalafo['URL_INTERNAL']:
        bot.send_message(name_channel, 
        f'''📌Название: {get_lalafo['title']}\n'''
        f'''🔎Адрес: {get_lalafo['adress']}\n'''
        f'''💰Цена: USD {get_lalafo['price']}\n'''
        f'''✍Описание: {get_lalafo['description']}\n'''
        f'''Фото: {get_lalafo['image_urls']}\n'''
        f'''Ссылка на обьявление: {get_lalafo['URL_INTERNAL']}\n'''
        )
        proverka['NEW_URl'] = get_lalafo['URL_INTERNAL']

    # else:
    #     print('else')

Ответы

Ответов пока нет.