переменные почему то is not defined temp timew и так далее

from aiogram import Bot, types, Dispatcher, executor
from bs4 import BeautifulSoup
import requests


bot = Bot(token='')
dp = Dispatcher(bot)

#команда старт
@dp.message_handler(commands=['start'])
async def start(message: types.message):
    await bot.send_message(message.chat.id, 'Привет я бот который выдаст тебе самые актуальные новости, а также погоду просто выбери нужное снизу')


#парсер новостей
@dp.message_handler(text='Новости')
async def get_news(message):

    url = 'https://news.rambler.ru'

    page = requests.get(url)

    soup = BeautifulSoup(page.text, "html.parser")

    filteredNews = []
    allNews = soup.findAll('a', class_='_6bF6i')



    for data in allNews:
        if data.find('div', class_='_1tnKf') is not None:
            filteredNews.append(data.text)
    for data in filteredNews:
        await message.answer(data)

    return filteredNews


#парсер погоды
@dp.message_handler(text='Погода')
async def pogoda(message):
    pog = 'https://world-weather.ru/pogoda/russia/inza/'

    r = requests.get(pog)

    soup = BeautifulSoup(r.text, 'html.parser')

    for temp in soup.find_all('div', id = 'weather-now-number'):
        temp = temp.text

    for obl in soup.find_all('span', id = 'weather-now-icon' ):
        obl = obl.text

    for timew in soup.find_all('div', class_ = 'weather-now-info'):
        timew = timew.text[6:-3]
    for dr in soup.find_all('div', id = 'weather-now-description'):

        line = dr.text
        last_index = 0
        itog = []
        for i, char in enumerate(line[1:-9]):
            if char.istitle() or i == len(line[1:-10]):
                itog.append(line[last_index:i + 1])
                last_index = i + 1
        itog.append(line[-10:-4])
        itog.append(line[-4:])
        dr = ' '.join(itog[:-5])

send_tg = 'Погода в Инзе:' + '\n' + temp + ' ' + obl + '\n'+ dr + '\n' + 'Данные на: ' + timew
print(send_tg)


@dp.message_handler(text="Новости")
async def news(message: types.message):
    await bot.send_message(get_news(message))

@dp.message_handler(text="Погода")
async def pogs(message: types.message):
    await bot.send_message(pogoda(message))


if __name__ == '__main__':
    executor.start_polling(dp)

Ответы (2 шт):

Автор решения: modeller

Потому, что объявлены внутри функции. Нужно ввести

send_tg = 'Погода в Инзе:' + '\n' + temp + ' ' + obl + '\n'+ dr + '\n' + 'Данные на: ' + timew

print(send_tg)

в функцию. Замените это на:

await message.answer(f'Погода в Инзе:\n{temp} {obl}\n{dr}\nДанные на: {timew}')

print - он для консоли, пользователи бота не увидят ответ.

→ Ссылка
Автор решения: Redume

Ошибка была связана с тем что переменные были локальными, их можно было вывести только в тех циклах в которых они были и объявлены.

# парсер погоды
@dp.message_handler(text='Погода')
async def pogoda(message):
    pog = 'https://world-weather.ru/pogoda/russia/inza/'

    r = requests.get(pog)

    soup = BeautifulSoup(r.text, 'html.parser')

    temp, obl, timew, dr = str, str, str, str

    for temp in soup.find_all('div', id='weather-now-number'):
        temp = temp.text

    for obl in soup.find_all('span', id='weather-now-icon'):
        obl = obl.text

    for timew in soup.find_all('div', class_='weather-now-info'):
        timew = timew.text[6:-3]

    for dr in soup.find_all('div', id='weather-now-description'):
        line = dr.text
        last_index = 0
        itog = []
        for i, char in enumerate(line[1:-9]):
            if char.istitle() or i == len(line[1:-10]):
                itog.append(line[last_index:i + 1])
                last_index = i + 1
        itog.append(line[-10:-4])
        itog.append(line[-4:])
        dr = ' '.join(itog[:-5])

    print(f'Погода в Инзе: \n{temp} {obl} \n{dr} \nДанные на: {timew}')
→ Ссылка