MrMeeseeks
@MrMeeseeks

Как возвратить данные парсера в телеграм-бот?

Всем привет, по ботам мало годной инфы обучаюсь как могу
Парсер работает как надо,но бот возвращает просто сообщение 'title', как организовать чтобы он верно присылал то что спарсилось? может как то надо конвертировать полученную инфу...

import requests
from bs4 import BeautifulSoup
import telebot
import os
from telebot import types

def parser():
    url = 'https://stopgame.ru/news'
    HOST = 'https://stopgame.ru'

    page = requests.get(url)

    soup = BeautifulSoup(page.text, 'lxml')
    TITLE = soup.title.string
    print(TITLE)

    ss = soup.find_all('div', class_='item article-summary article-summary-card')

    news = []
    for s in ss:
        news.append({'title': s.find('div', class_='caption caption-bold').get_text(strip=True),
        'link': HOST + str(s.find('a').get('href'))})

    print(f'Загружено {len(news)} статей с новостями в файл')
    return news


def bot():
    bot = telebot.TeleBot('token is here')
    keyboard = telebot.types.ReplyKeyboardMarkup(True,True)
    keyboard = types.KeyboardButton(text='Получить новости')
##    bot.send_message(message.chat.id,text='Узнать новости?', reply_markup=keyboard)

    @bot.message_handler(commands=['get'])
    def send_news(message):
        bot.send_message(message.chat.id, parser())

    bot.polling()
bot()
  • Вопрос задан
  • 415 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Нужно отправлять данные в виде нормальной строки, либо JSON, если нужен список.

Для строки, например, можно сделать так:
def parser():
    url = 'https://stopgame.ru/news'
    HOST = 'https://stopgame.ru'

    page = requests.get(url)

    soup = BeautifulSoup(page.text, 'lxml')
    TITLE = soup.title.string
    print(TITLE)

    ss = soup.find_all('div', class_='item article-summary article-summary-card')

    news = []
    for s in ss:
        news.append({'title': s.find('div', class_='caption caption-bold').get_text(strip=True),
        'link': HOST + str(s.find('a').get('href'))})

    print(f'Загружено {len(news)} статей с новостями в файл')
    
    pretty_news = ''
    for content in news:
        pretty_news += '{}\n{}\n\n'.format(contnet['title'], contnet['link'])
    return pretty_news
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 мая 2024, в 22:58
3000 руб./за проект
18 мая 2024, в 21:07
5000 руб./за проект
18 мая 2024, в 20:58
5000 руб./за проект