Задать вопрос
mediumWebDev
@mediumWebDev
Просто программист из деревушки

При запуске бота выходит ошибка, что делать?

написал бота, он парсит новостной сайт и делает пост в тгк, но при его запуске, он не может отправить сообщение из за ошибки: Not found. Как это можно исправить?(код ниже)

import requests
from bs4 import BeautifulSoup
from telegram import Bot, error
import time
import asyncio
import random

# Конфигурация
TELEGRAM_TOKEN = '*****************'
CHANNEL_ID = '-*****************'  
HABR_NEWS_URL = '****************'
POLLING_INTERVAL = 3600  # Интервал опроса сайта (в секундах)

# Инициализация бота
bot = Bot(token=TELEGRAM_TOKEN)

def generate_catchy_headline(original_title):
    templates = [
        f"{original_title}: Why You Should Care",
        f"{original_title}: What No One is Talking About",
        f"{original_title} - You Won't Believe What Happened Next!",
        f"The Shocking Truth About {original_title}",
        f"{original_title}? Here's What Experts Say",
        f"{original_title}: The Inside Story",
    ]
    return random.choice(templates)

def fetch_latest_news():
    try:
        response = requests.get(HABR_NEWS_URL)
        response.raise_for_status()
        soup = BeautifulSoup(response.content, 'html.parser')

        articles = soup.find_all('article', class_='tm-articles-list__item')
        
        if not articles:
            print("Не удалось найти статьи на странице. Проверьте селектор.")

        latest_news = []

        for article in articles:
            title_tag = article.find('a', class_='tm-title__link')
            if title_tag:
                original_title = title_tag.get_text(strip=True)
                catchy_title = generate_catchy_headline(original_title)
                link = 'https://habr.com' + title_tag['href']
                latest_news.append(f"{catchy_title}\n{link}")
            else:
                print("Заголовок не найден, пропускаем статью.")
        
        return latest_news
    except requests.RequestException as e:
        print(f"Ошибка при получении новостей: {e}")
        return []

async def post_news_to_telegram(news_list):
    for news in news_list:
        try:
            await bot.send_message(chat_id=CHANNEL_ID, text=news)
            print(f"Сообщение отправлено: {news}")
        except error.TelegramError as e:
            print(f"Ошибка при отправке сообщения: {e.message}")

async def main():
    last_posted_news = set()

    while True:
        news_list = fetch_latest_news()
        
        if news_list:
            new_posts = [news for news in news_list if news not in last_posted_news]
            
            if new_posts:
                await post_news_to_telegram(new_posts)
                last_posted_news.update(new_posts)
        
        await asyncio.sleep(POLLING_INTERVAL)

if __name__ == '__main__':
    asyncio.run(main())  # Запуск основного асинхронного цикла
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Если ты пытаешься парсить https://habr.com/ru/news/, то у меня плохие новости - там контент подгружается динамически, с помощью JS. Эта тема тут уже не раз обсуждалась, ищи "как парсить динамический сайт".
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект