Найти - Пользователи
Полная версия: Парсинг с выводом в Telegram через бота
Начало » Python для новичков » Парсинг с выводом в Telegram через бота
1
Alexandr88
Добрый день! Недавно приступил к изучение данного языка программирования. Ну и вообще первого в моей жизни
Решил попробовать спарсить события с сайта и отправить их сообщением через телеграм бота.

 import telebot
from bs4 import BeautifulSoup
import requests
bot = telebot.TeleBot("828935062:AAGO7-sS7KkqkRYD2BvdJ-URTETkWJM8dkI")
url = 'https://www.afisha.ru/chelyabinsk/schedule_concert/'
page = requests.get(url)
 
# Парсим страницу
 
soup = BeautifulSoup(page.text, 'html.parser')
events = soup.findAll('li', class_='SlE6Y _1gSmu')
 
# Собираем необходимые данные со страницы:
 
for i in events:
    event = i.find('section').find('h3').find('a').get_text()
    try:
        desc = i.find('section').find('div', class_='').get_text()
    except:
        desc = "Нет описания"
    date = i.find('section').find('div', class_='_1Jo7v').get_text()
    answer = event + desc + date
 
# Отправляем через бота:
 
    @bot.message_handler(content_types=['text'])
    def send_events_chel(message):
        bot.send_message(message.chat.id, answer)
    bot.polling(none_stop=True)
Столкнулся с такой проблемой. Если принтом вывести переменную answer, то выводится полный список событий.
Однако бот отправляет сообщением только первую строку.
В чём моя ошибка?
py.user.next
Alexandr88
Если принтом вывести переменную answer, то выводится полный список событий.
Не вижу у тебя собирания нескольких строк в цикле в список строк.

И для отправки в Telegram не нужен модуль telebot. Достаточно только адрес бота и запрос к методу.

Скрипт отправки сообщения через бота в приват пользователя, в канал или группу.
  
#!/usr/bin/env python3
 
# Посылает сообщение в Telegram через заданного бота в заданный чат.
#
# Для посылки сообщения нужно:
# 1. Установить переменную среды BOTTOKEN в значение токен бота.
# 2. Установить переменную среды CHATID в значение идентификатор чата
# (числовой или @буквенный).
# 3. Запустить скрипт.
#
# Например (в Linux):
# $ export BOTTOKEN=1111111111:AAA1Aa1A1aaaA1AA1aaaaaAaAaAG-aA1Aaa
# $ export CHATID=2222222222
# $ ./tg_sender.py
 
import os
import urllib.request
import json
 
def send_message():
    bottoken = os.getenv('BOTTOKEN')
    send_url = 'https://api.telegram.org/bot{}/sendMessage'.format(bottoken)
    send_headers = {
        'Content-Type': 'application/json'
    }
    send_method = 'POST'
 
    chatid = os.getenv('CHATID')
    username = 'User'
    text = 'Text'
 
    data_dict = {
        "chat_id": chatid,
        "text": 'Привет, {}. Твой текст: "{}"'.format(
            username, text)
    }
    send_data = json.dumps(data_dict).encode('latin1')
 
    req = urllib.request.Request(
        url=send_url,
        headers=send_headers,
        method=send_method,
        data=send_data)
    with urllib.request.urlopen(req) as recv_data:
        out = recv_data.read()
    return True
 
def main():
    if send_message():
        print('ok')
 
if __name__ == '__main__':
    try:
        main()
    except urllib.error.HTTPError:
        print('Can\'t send:'
              ' set environment variables:'
              ' BOTTOKEN and CHATID')


tags: telegram
Alexandr88
По поводу вашего скрипта. Это для меня пока слишком сложно)
Telebot использую для того чтобы можно было общаться с ботом. Получать список событий по запросу к нему. Возможно потом добавлю что то ещё.
Я попробовал обернуть полученные данные в список вот так:
    answer.append(event + "|" + desc + "|" + "|" + date)
    answer1 = answer[-1]
Коряво, но по-другому пока не умею. Если вывести принтом получается вот так:
«Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00
«Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00
«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00
«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00
Cream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00
«ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00
XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00
Макс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00
Niletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00
«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00
Noize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00
Баста|Важнейший российский рэпер||Трактор, 31 октября в 20:00
Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00
«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00
Пелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00
Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00
«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00
Morgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00
«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00
«Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00
«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00
«Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00
Saluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00
«Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00

Теперь, когда обращаешься к боту, он вообще ничего не отвечает. Может ему надо список как-то передать строкой? Или сообщение слишком длинное?
py.user.next
Alexandr88
Telebot использую для того чтобы можно было общаться с ботом. Получать список событий по запросу к нему.
Чтобы отправить боту сообщение можешь использовать мой скрипт. Можешь токен и идентификатор чата прямо в скрипт записать без взятия их из переменных окружения. Сначала научись просто в цикле любые сообщения боту отправлять. Отправь боту в цикле три строки любые. Не какие-то там, которые ты собираешь, а просто сообщения из строк 1 2 3. И ты увидишь, что ты нихрена не можешь отправить. Всё это следует из твоего кода, который ты отправил выше. А потом, когда ты научишься строки боту отправлять последовательно в цикле, тогда ты уже займёшься отправкой данных, которые ты тоже собирать воедино не умеешь.

Alexandr88
Если вывести принтом получается вот так:
А ты должен его не выводить принтом, а склеить в один текст и отправить этот весь склеенный текст боту один раз.
Но можно и построчно отправлять боту строку за строкой. Но если с ботом идёт общение у пользователя, то эта отправка строка за строкой будет разрывать содержимое у пользователя на экране.

Alexandr88
Или сообщение слишком длинное?
Боты Telegram поддерживают поле text в размере 4 килобайта в одном сообщении.
https://core.telegram.org/bots/api#message
text 	String 	Optional. For text messages, the actual UTF-8 text of the message, 0-4096 characters

>>> s = """\
... «Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00
... «Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00
... «Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00
... «Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00
... Cream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00
... «ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00
... XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00
... Макс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00
... Niletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00
... «Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00
... Noize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00
... Баста|Важнейший российский рэпер||Трактор, 31 октября в 20:00
... Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00
... «Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00
... Пелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00
... Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00
... «Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00
... Morgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00
... «Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00
... «Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00
... «Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00
... «Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00
... Saluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00
... «Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00"""
>>>
>>> s
'«Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00\n«Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00\n«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00\n«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00\nCream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00\n«ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00\nXIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00\nМакс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00\nNiletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00\n«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00\nNoize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00\nБаста|Важнейший российский рэпер||Трактор, 31 октября в 20:00\nBoulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00\n«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00\nПелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00\nТони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00\n«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00\nMorgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00\n«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00\n«Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00\n«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00\n«Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00\nSaluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00\n«Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00'
>>> len(s)
2183
>>> len(s.encode('utf-8'))
3656
>>>
Alexandr88
Спасибо за помощь!
В цикле for добавил
     answer.append(event + "|" + desc + "|" + date)
string = "\n \n".join(answer)
И после этого бот выдал сообщение в телеграме в таком виде:
«Джаз-детям» (онлайн-трансляция)|Нет описания| 19 августа в 15:00

«Помни имя свое» (онлайн-трансляция)|Нет описания| сегодня в 20:00

«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания| 29 августа в 17:00

«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века|Галактика развлечений, 25 сентября в 19:00

Cream Soda|Эклектичный хаус-поп от самого модного трио страны|Ozz, 25 сентября в 19:00

«ДДТ»|Душевные герои русского рока|Трактор, 23 апреля 2021 г. в 19:00

XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания| 18 августа в 19:00

Макс Барских|Традиционный поп в трендовой обертке|Дворец спорта «Юность», 25 сентября в 20:00

Niletto|Бро-хаус-артист, взорвавший чаты|Галактика развлечений, 18 ноября в 19:00

«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»|World Trade Center, 11 июля 2021 г. в 20:00

Noize MC|Видный герой русского хип-хопа|World Trade Center, 9 октября в 19:00

Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера|Галактика развлечений, 10 октября в 19:00

Баста|Важнейший российский рэпер|Трактор, 31 октября в 20:00

«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока|Галактика развлечений, 16 сентября в 19:00

Пелагея|Главная звезда российского фолк-рока|World Trade Center, 8 октября в 19:00

Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта|Ozz, 13 октября в 19:00

«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект|Ozz, 17 октября в 19:00

Morgenshtern|От рэп-разоблачителя до стадионного артиста|Галактика развлечений, 23 октября в 19:00

«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих|Ozz, 23 ноября в 20:00

«Аффинаж»|Чувственный нуар-шансон с аккордеоном|Ozz, 20 сентября в 19:00

«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года|Ozz, 21 сентября в 19:00

«Сказки с большим оркестром»|Нет описания|Концертный зал им. Прокофьева, 26 сентября в 15:00

Saluki|Из битмейкеров — в хитмейкеры|Ozz, 26 сентября в 20:00

«Нервы»|Подростковый поп-панк — разумеется, о любви|Галактика развлечений, 5 октября в 19:00

Щас допилю чтобы на команды реагировал.
Позже буду разбираться как обойтись без библиотеки Telebot
py.user.next
Alexandr88
Щас допилю чтобы на команды реагировал.
Позже буду разбираться как обойтись без библиотеки Telebot
Там два вида ботов можно делать.
Один вид - это активный бот. Ты ставишь где-то скрипт управления ботом (на своём компе или на хостинге) и он активно опрашивает через бота, установленного в Telegram, какой-то канал, группу или приват бота, нет ли там новых сообщений. Если там есть новые сообщения, он получает информацию о них и на это может реагировать, а может и ничего не делать.
Второй вид - это пассивный бот. Ты можешь делать скрипт управления ботом как угодно и вообще не использовать питон даже. При обращении к боту, установленному в Telegram, из канала, группы или в привате бот посылает сообщение об этом обращении на какой-то адрес, который у него настроен. Что там происходит на этом адресе, бот вообще не знает. И он ничего не ждёт в ответ.
При любом из этих видов ты можешь в любой момент подключиться к боту, установленному в Telegram, и что-то ему отправить. Это делается независимо от того, посылал ему кто-то команду или не посылал. Он просто в любой момент готов принять какую-то произвольную инструкцию от того, кто знает его секретный токен, и выполнить её.

Активные боты менее надёжны и больше требуют ресурсов. Большую часть времени они работают впустую. Если ему месяц никто ничего не посылал, он всё равно весь месяц проопрашивает сервер Telegram “а не присылал ли мне кто-то что-то за последние секунды?”. Другое дело пассивные боты. Они могут спать вообще весь месяц, но когда Telegram им что-то пришлёт, они сразу проснутся и один раз обработают пришедшее сообщение. То есть они не жрут ресурсы.

Тут тебе пару ссылок, которые предоставляют обзоры на пассивные боты
https://retifrav.github.io/blog/2018/12/02/telegram-bot-webhook-ru/
https://groosha.gitbook.io/telegram-bot-lessons/chapter4


tags: telegram bot
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB