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()
  • Вопрос задан
  • 417 просмотров
Решения вопроса 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект