Пишем Телеграм Бота для Автопостинга новостей с Хабра | Телеграм бот + Парсер

Поділитися
Вставка
  • Опубліковано 7 лип 2021
  • Сегодня мы напишем специального Телеграм Бота, который будет брать новостные посты с сайта Хабр, и постить их в нашем Телеграм канале! В этом ролике мы будем использовать библиотеки: telebot, telebot и beautifulsoup.
    Привет! Меня зовут Игорь. На моём канале ты сможешь найти уроки по нейронным сетям, визуализации данных и программированию в целом.
    Моя цель - сделать программирование более доступным и понятным. Для просмотра моих видео вам не нужно высшее образование по Computer science. Все непонятные темы и термины я буду понятно объяснять и показывать на примерах.
    Оставайся с нами, и чтобы не пропустить ни одного видео - подписывайся на канал и нажимай на колокольчик!
    ► Ссылки из видео:
    Код из видео - github.com/IgorVolochay/Teleg...
    ✅ Группа VK - bit.ly/VK_PseudoDev
    ✈️ Telegram канал - t.me/PseudoDeveloper
    💲💲 Поддержи проект на Boosty - boosty.to/pseudodev
    📖 Плейлист "Программирование на Практике" - • Программирование на пр...
    📖 Плейлист “Нейронные Сети на Понятном Языке” - • Нейронные Сети на Поня...
    📖 Плейлист "Изучение NumPy" -
    • Изучение NumPy

КОМЕНТАРІ • 131

  • @dan323609
    @dan323609 2 роки тому +12

    Не работает, ошибка

    • @user-oy9qk4om1x
      @user-oy9qk4om1x 2 роки тому +2

      такая же тема

    • @PseudoDev
      @PseudoDev  2 роки тому +14

      Dan Danzelov и Антон, да, такая проблема есть. Относительно недавно Habr немного поменял архитектур сайта. Положение всех элементов в HTML коде осталось на месте, но вот название классов и id - изменились.
      Вам просто нужно, следуя инструкции из видео, поизучать код страницы, и в программу поместить название класса не из видео, а из самого сайта. Надеюсь я доходчиво объяснил, но если будут ещё вопросы - задавайте 😁

    • @dan323609
      @dan323609 2 роки тому

      @@PseudoDev спасибо разберусь )

    • @user-oy9qk4om1x
      @user-oy9qk4om1x 2 роки тому

      @@PseudoDev мб я тупой, но не очень понял как кусок с def commands работает и зачем в конце кода идет возврат None и Post id

    • @sep_spell4668
      @sep_spell4668 2 роки тому

      @@PseudoDev Подскажи пж,как сделать парсинг из папки на пк,что бы он по порядку в течении определённого времени сразу картинку по очереди из папки?
      И желательно из другого канала ещё.

  • @dayler3
    @dayler3 Рік тому +1

    Здравствуй, проверил цикл где идет сравнение back_post_id и post_id, вроде бы все должно работать, но даже если у них id одинаковые он снова шлёт тот же пост, можно ли как то исправить?

  • @RYAN-ev9ev
    @RYAN-ev9ev 2 роки тому

    Здорово, какую функцию нужно использовать чтобы например отправить ссылку картинки из инстаграм, а он скачивает и отправляет в чат🤔

  • @sivyj_merin
    @sivyj_merin 9 місяців тому

    Привет сколько будет стоить сделать грабер постов готовый чтоб в настройках менять только сайт. Я просто не шарю во всем этом пытался разобраться запутался

  • @dmzdmz7013
    @dmzdmz7013 2 роки тому

    Подскажите пожалуйста, а как можно открыть ссылку в боте от пользователя автоматически. Спасибо

  • @1isishka
    @1isishka Рік тому

    Не подскажите как исправить ошибку "'NoneType' object has no attribute 'text'"? элементы разметки на актуальные я поменяла

  • @user-ry4zx4fu7y
    @user-ry4zx4fu7y Місяць тому

    Нужно подробнее рассказать о моментах установки программ, о возможных проблемах.
    Я не программист нифига, но вижу что всё просто. Проблемы только с всевозможнымм настройками программы и разными установками.

  • @user-cb9fx3gv7d
    @user-cb9fx3gv7d 2 роки тому +2

    Привет, а можешь сделать видео по хостингу бота ?

  • @fruitjam8838
    @fruitjam8838 2 роки тому +1

    Можешь подсказать какое в данный момент название класса и id на Habr? не могу разобраться, что вписывать в код (после изменения архитектуры).

    • @Whosheit
      @Whosheit Рік тому

      Выведи весь код страницы в терминал
      Там найди нужный тебе текст и вытащи от туда див класс айди, у меня не воркало с просмотром кода страницы, а вот как описал тебе, заработало

  • @greykoff3325
    @greykoff3325 7 місяців тому

    Здраствуйте есть ошибка в коде при выполнении парсера, можете помочь разобраться. ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))
    Это в какую сторону нужно копать сейчас Вы писали что на хабре изменили структуру html кода. Теперь что делать можно могли бы подсказать если будет время.

  • @buddyconcert1918
    @buddyconcert1918 3 роки тому +1

    Какое познавательное видео! Спасибо!
    Интересно, возможно ли написать бота и насколько это сложно, чтобы он автоматически предлагал запись в группе ВКонтакте загружая туда фото/видео/текст из определенных Инстаграм-аккаунтов в реальном времени?

    • @user-yv8wu1jn4l
      @user-yv8wu1jn4l Рік тому

      немношко сложно но возможно

  • @piratsyberyjski3644
    @piratsyberyjski3644 2 роки тому

    Привет, использовал твой код, но для другого сайта. Проблема такая, бот все равно отправляет одно и тоже сообщение по нескольку раз. К тому же, не знаю с чем связанно если написать боту Старт - два раза подряд, он запостит 2 одинаковые новости, но если написать старт еще один раз он перестает реагировать, даже если ему писать рэндомные слова, он не выводит текст "Я тебя не понимаю. Напиши Старт".

  • @moneyy-time
    @moneyy-time Рік тому

    Не работает. Когда что то пишу в боте, пост не отправляется в канал. Хотя все сделал точ точ как в видосе

  • @ssshhhhhiiiizzzzaaa
    @ssshhhhhiiiizzzzaaa 9 місяців тому

    Я немного не понял, как код связать с ботом?

  • @RockstarAlexander
    @RockstarAlexander 3 роки тому

    👍👍👍👍

  • @user-tv9cq3ch1x
    @user-tv9cq3ch1x Рік тому

    Красава

  • @resttime00
    @resttime00 Рік тому

    Ребята куда писать и сохранить ето код?

  • @bananeah
    @bananeah 2 роки тому +1

    Текст не пересылается когда пишешь боту,с чем это связано? Бот у меня администратор,всё ввёл правильно,что не так?

    • @tttttt4260
      @tttttt4260 Рік тому +1

      Если у тебя Пайтон 3.10 >, то могут быть проблемы. Я поставил 3.9, всё наладилось

  • @artyr2944
    @artyr2944 Рік тому

    привет,вот если мне нужно будет несколько ссылок парсить (тз такое же как и действия в твоем видео) но нужно парсить несколько ссылок,как мне нужно это организовать ? просто создать функцию где будет собираться данные как на примере с видео (url,description,title). но если я буду везде одинаковые название переменных писать, то код же может не работать или я не прав? пожалуйста кто в теме,просветите пожалуйста

    • @PseudoDev
      @PseudoDev  Рік тому

      Привет. Смотри, если ты будешь работать с одним и тем же сайтом (допустим UA-cam), то ты можешь организовать функцию-парсер, которая будет принимать в качестве аргумента URL нужного видео, а на выходе, через "return" будет возвращаться список следующего вида: [title, description, url]. Таким образом тебе не придётся создавать большое количество отдельных переменных для разных парсеров

  • @samadovmalik
    @samadovmalik 2 роки тому

    А с других каналов в телеге !?)

  • @user-zi6dv4ex3d
    @user-zi6dv4ex3d Рік тому

    Существуют какие-либо ограничения? Могут ли забанить IP-адрес за слишком частое обращение к сайту?

    • @RandomJel
      @RandomJel Рік тому

      используй прокси у теня такойже случай был получается так что хабр видит подозрительную активность с твое домена изза частых запросов (ты какбудто дудосишь сайт)

  • @only_prognoz
    @only_prognoz 9 днів тому

    Привет, а как сделать чтобы только заголовок с новостного поста публиковать? Например риа новости: «Сегодня такое вот случилось» и чтобы только заголовки постились, как? А то в видео с ссылкой на ресурс и немного не то

    • @PseudoDev
      @PseudoDev  8 днів тому

      Для этого нужно подстраивать программу-парсер под особенности сайта "риа новости". Но если рассматривать на примере нашей программы, то можно формировать пост лишь из значения переменной title, а description и url -не записывать

  • @user-qz5ip5ee3u
    @user-qz5ip5ee3u Місяць тому

    А что делать если сайт не имеет 'id'? как в этом случае делать?

  • @lekarminecraftpe4093
    @lekarminecraftpe4093 Місяць тому

    а как же кнопка отписки от подписки?

  • @waspe916
    @waspe916 2 роки тому +4

    получается, если за 30 минут ожидания бота опубликуется несколько статей, то бот пришлет только последнюю

    • @waspe916
      @waspe916 2 роки тому

      поэтому нужно сверять, как минимум, 3 последних

  • @user-gh2ml3cf5o
    @user-gh2ml3cf5o Рік тому

    Можно такой вопрос: Telegram боты создаются только через язык программирования Python или можно для этих целей использовать другие языки программирования? Почему на ваш взгляд так много видео создания Telegram ботов именно с помощью языка Python?

    • @PseudoDev
      @PseudoDev  Рік тому +1

      Можно писать ботов на любом языке программирования, хоть на ассемблере. На Python это делать просто удобнее всего, но, насколько я знаю, есть ещё удобные API для языков: C++, C#, Java и JavaScript

    • @user-gh2ml3cf5o
      @user-gh2ml3cf5o Рік тому

      @@PseudoDev спасибо за ответ 👍

  • @coderblog4485
    @coderblog4485 2 роки тому

    Не работала 🤔

  • @Skwart7
    @Skwart7 2 роки тому

    Что делать если бот отправляет только первую букву заголовка и нет никакой ошибки?

    • @PseudoDev
      @PseudoDev  2 роки тому

      Возможно ты при парсинге или постинге заголовка случайно поставил нулевой индекс: [0]
      Пробегись по коду, может ты где-то недосмотрел

  • @barinbigcitymadridnight1585

    Подскажите, пожалуйста, а сам код то куда нужно вставлять? Я как то этот момент упустил

    • @PseudoDev
      @PseudoDev  Рік тому

      Не понимаю о чём вы

    • @user-dw6hh2nu5d
      @user-dw6hh2nu5d Рік тому

      @@PseudoDev человек не понял как код вообще запускается, написать то написал, а как код запустить и где

    • @Krasnovosti-ru
      @Krasnovosti-ru 4 місяці тому

      @@user-dw6hh2nu5dАвтор видать сам видео передёрнул, не знает о чём речь.

  • @Earth-house
    @Earth-house Рік тому

    Голова задымилась)

  • @Krasnovosti-ru
    @Krasnovosti-ru 4 місяці тому

    Я сам программист, но Delphi, PHP. Одно не пойму, пайтон интерпритируемый? То куда совать код?

    • @PseudoDev
      @PseudoDev  4 місяці тому

      Python - интерпретируемый язык. Код подается на вход в интерпретатор. Стандартный и самый базовый интерпретатор Python можно скачать на официальном сайте языка - www.python.org/downloads/

    • @Krasnovosti-ru
      @Krasnovosti-ru 4 місяці тому

      @@PseudoDev Благодарю за ответ. Но видео не полноценное:
      Т.е. вы показали a=2 и b=3, потом print (a+b);
      В браузере показали "5".
      Но то, что нужно для этого ещё и поднять web-сервер с движком PHP, создать домен, засунуть файл в определённую директорию + обозвать файл index-ным, вы этот процесс пропустили.
      Код любой дурак с вашего видео перенаберёт в любом блокнотике.
      Но хотелось бы видеть реализацию под ключ, если вы уж сказали "А", говорите и "Б".
      Я лично заинтересован в создании бота парсера и ваше видео уже что-то дает.
      Но вот беда - не полностью.

  • @Kvant_Jack
    @Kvant_Jack 2 роки тому

    Пытаюсь запилить бота, который определенные слова на определённом сайте пишет. Тхт файл открыл, измеряю, но вот вопрос: куда-то в а BotFather вставить текст надо или же как использовать данный код? Сорян за нубство, но всё же.

  • @user-bp1tf1py9u
    @user-bp1tf1py9u 10 місяців тому

    вау

  • @vitaliykrymskiy4303
    @vitaliykrymskiy4303 2 роки тому +3

    Ребзя, чтобы код бота работал, он должен быть одним из админов канала... У меня по другому не работало.. Вдруг кому то поможет)

    • @sokolov_channel2035
      @sokolov_channel2035 2 роки тому +1

      У тебя получилось исправить class и id?Можешь прислать код, у меня не получается. Спасибо

    • @danielgeller7629
      @danielgeller7629 2 роки тому

      @@sokolov_channel2035 привет, у тебя всё в итоге заработало?

  • @klaymov
    @klaymov Рік тому

    Привет, сделал всё по твоему ролику, всё работает! Но, работает если только написать боту "старт", как сделать что бы не пришлось ничего писать боту?

    • @PseudoDev
      @PseudoDev  Рік тому

      Тогда нужно убрать условие запуска по тексту "страт", и сразу перейти к bot.send_massege()

    • @klaymov
      @klaymov Рік тому

      @@PseudoDev и как мне это сделать? если я убираю условие то бот вообще ничего не постит в канал.

  • @user-to9zd2tr2o
    @user-to9zd2tr2o 2 роки тому

    видео познавательное, но на начальном этапе error 403 для пересылки сообщений

    • @vitaliykrymskiy4303
      @vitaliykrymskiy4303 2 роки тому

      чтобы код бота работал, он должен быть одним из админов канала... У меня по другому не работало.. Вдруг поможет)

  • @MrBooomsik
    @MrBooomsik 9 місяців тому

    Добрый день, а возможно вакансии спарсить с этого сайта?

    • @PseudoDev
      @PseudoDev  9 місяців тому

      Да, вполне реализуемо

    • @Krasnovosti-ru
      @Krasnovosti-ru 4 місяці тому

      Всё что видите и даже не видите, но видите в дебагере, всё можно парсить. Парсинг это прежде всего чтение всего того, что должно уйти на веб-клиента в браузер.

  • @user-cz1ti4vj9m
    @user-cz1ti4vj9m Рік тому

    Подскажите пожалуйста, нужен бот. который логинится на сайт, проверяет не изменилась ли страница и если изменилась -высылает сообщение в телеграм нужным пользователям. Спасибо!

  • @MaxmasMontage
    @MaxmasMontage 2 роки тому

    Можно новости с яндекса также делать?

    • @PseudoDev
      @PseudoDev  2 роки тому

      Можно, главное перенастроить работу парсера на архитектуру Яндекса

    • @MaxmasMontage
      @MaxmasMontage 2 роки тому

      @@PseudoDev там просто нету айдишников вообще, там новости никак не пронумерованы в html

    • @PseudoDev
      @PseudoDev  2 роки тому

      А. Да, такое бывает. Это означает, что почти вся архитектура построена на JS(

  • @AnnaBulanova
    @AnnaBulanova Рік тому

    А что за редактор кода? Можно название?

    • @PseudoDev
      @PseudoDev  Рік тому

      Да, конечно. Я использую Visual Studio Code

    • @Krasnovosti-ru
      @Krasnovosti-ru 4 місяці тому

      @@PseudoDevКод куда совать после написания?

  • @Earth-house
    @Earth-house Рік тому

    Я сегодня сам попробую. Если не получится плачу деньги за бота который привязан к определенному сайту))))

  • @TheDimonchiks
    @TheDimonchiks 2 роки тому

    А можно сделать чтобы бот постил новости из группы вк?

    • @PseudoDev
      @PseudoDev  2 роки тому

      Да, можно. Главное подстроить парсер под архитектуру ВК, и всё будет ок 👌

    • @Whosheit
      @Whosheit Рік тому

      как раз сижу делаю азаза

  • @JVSd-SG
    @JVSd-SG 2 роки тому

    А как сделать чтобы он каждое утро м вечер в определённое время собирал и отправлял?

    • @PseudoDev
      @PseudoDev  2 роки тому

      Можно убрать циклы, чтобы оставался код чисто парсера и бота-отправителя, и запускать этот скрипт. В Виндоус есть специальный раздел системных вызовов, которые срабатывают в определенное время. Точно не помню как называется, но в Гугле легко найти

    • @JVSd-SG
      @JVSd-SG 2 роки тому

      @@PseudoDev cron?

    • @PseudoDev
      @PseudoDev  2 роки тому

      Да, что-то типа того

  • @PseudoDev
    @PseudoDev  День тому

    Понравился ролик и хочешь видеть больше годного контента?
    Поддержи проект на Boosty - boosty.to/pseudodev

  • @maarkmellow
    @maarkmellow 8 місяців тому

    Привет! При запуске исправленного кода (с новыми классами) вылезает ошибка "TypeError: 'NoneType' object is not subscriptable" ссылающаяся на строку "back_post_id = post_text[1]". Происходит это из за того что эта переменная ссылается на переменную(back_post_id = None), равную null или же None. Что ставить вместо значения None?

  • @NahodkiWBOZON_1
    @NahodkiWBOZON_1 4 місяці тому

    Привет! Текст понятно, а как картинку переслать?

    • @PseudoDev
      @PseudoDev  4 місяці тому

      Ну так, картинка - это тот же текст. С помощью open() переносим картинку в оперативную память. Там она хранится в форме последовательности бит, а их можно легко отобразить в виде текста и отослать. myfile = open(image, 'rb') bytes = myfile.read()

    • @NahodkiWBOZON_1
      @NahodkiWBOZON_1 4 місяці тому

      @@PseudoDev это прикол 🤣

    • @PseudoDev
      @PseudoDev  4 місяці тому

      @@NahodkiWBOZON_1 забайтил получается))

    • @NahodkiWBOZON_1
      @NahodkiWBOZON_1 4 місяці тому

      @@PseudoDev получается

  • @vitaliishpychka9243
    @vitaliishpychka9243 Рік тому

    Можешь подготовить курс по PHP?

    • @PseudoDev
      @PseudoDev  Рік тому +1

      Сори, не пишу на PHP 💁‍♂

    • @Krasnovosti-ru
      @Krasnovosti-ru 4 місяці тому

      Курс могу организовать - уровень back-end разработчик и FULL-stack разработчик (уровень профессиональности - middle).
      Но его люди не хотят покупать. Все хотят сами - бесплатно. 9 000 брал на Авито, ни один не захотел. А учиться в ВУЗе 300 000 - 500 000 р + много левой информации о истории России, Рюрика и уроки философии...
      Выбор всегда за нами.

  • @user-dh5gu9yk4d
    @user-dh5gu9yk4d 8 місяців тому

    Не работает

  • @nikitaermolenko7813
    @nikitaermolenko7813 Рік тому

    Попытался спарсить Яндекс Дзен ( реальная задача стояла ), нихера, там защита от этой библиотеки, пробую Silenium..

    • @PseudoDev
      @PseudoDev  Рік тому

      Некоторые большие сервисы предоставляют собственные API для парсинга информации. Надо глянуть, может у Дзена тоже есть что-то такое 🤔

    • @nikitaermolenko7813
      @nikitaermolenko7813 Рік тому

      @@PseudoDev я хотел парсить статьи из Дзен канала в канал телеграмма, интересно, как это сделать?
      Я нашел ролик по selenium, но там проблемка, браузер открывается каждый раз при парсинге

  • @axelfoleystyle
    @axelfoleystyle 2 місяці тому

    Вопрос открыт.
    Как связаться с автором этого канала?
    Как сделать бота, который будет: принимать, пересылать сообщения на канал? При этом, с возможностью бана избранных пользователей, которые присылают сообщения бо́ту.

    • @PseudoDev
      @PseudoDev  2 місяці тому

      Да нет, вопрос полностью закрыт)
      Цель видео была в парсинге новостного сайта, и автоматической публикации в телеграм канале. Все что вы написали - никак не связано с видео

  • @nikita.134
    @nikita.134 2 роки тому

    Если ссылку на хозяина поста не оставлять,он может сделать так чтобы меня забанили?

  • @user-nd6rm7kb3p
    @user-nd6rm7kb3p 2 роки тому

    Как сделать тоже самое для вк? Ответьте пожалуйста

    • @PseudoDev
      @PseudoDev  2 роки тому

      Используй VK Api

    • @user-nd6rm7kb3p
      @user-nd6rm7kb3p 2 роки тому

      @@PseudoDev а как

    • @PseudoDev
      @PseudoDev  2 роки тому +2

      @@user-nd6rm7kb3p по назначению 😁

  • @evgenianovikova3596
    @evgenianovikova3596 6 місяців тому

    Еще не пробовала написать аналогичный бот (попозже попробую), но спасибо за видео а то да, все эти гайды для дебилов...

  • @bgds5848
    @bgds5848 Рік тому

    Ошибка

  • @pandasstero1123
    @pandasstero1123 2 роки тому

    Этого бота можно закинуть в беседу?

    • @PseudoDev
      @PseudoDev  2 роки тому

      В теории - да, это вполне реализуемо

    • @pandasstero1123
      @pandasstero1123 2 роки тому

      @@PseudoDev И ещё , что делать если выдаёт эту ошибку? Traceback (most recent call last):
      File "C:\Users\shugu\Desktop\Telegram-Parser-Bot-main\Parser.py", line 10, in
      title= post.find("a", class_="newsitem__title-inner").text.strip()
      AttributeError: 'NoneType' object has no attribute 'find'

    • @pandasstero1123
      @pandasstero1123 2 роки тому

      ​@@PseudoDev Я просто создаю бота для парсинга новостной ленты майл , но не знаю что нужно удалить из твоего кода файла Bot.py , чтобы бот отправлял без проверки на айди , а просто каждые 20 минут , как это сделать? Помоги пожалуйста! Поддержал кстати твой канал)

    • @PseudoDev
      @PseudoDev  2 роки тому

      ​@@pandasstero1123 Я не уверен в чём конкретно проблема. Нужно посмотреть в логи при DeBag-е (конкретно нужно посмотреть на значение переменной "post"). Скорее всего в строке (post = soup.find("li", class_="content-list__item content-list__item_post shortcuts_item", id=True)) программа просто не может обнаружить элемент на сейте, тем самым, в переменную "post" передаётся значение "None".
      Я могу и ошибаться, но нужно сделай дебаг

    • @PseudoDev
      @PseudoDev  2 роки тому

      @PANDASSTER O 5:06 вроде как, этот код работает без привязки к id. Ну а промежуток в 20 минут, можно сделать так же, как и тут (5:34), тут особой магии никакой нет. Кста, спасибо за поддержку 😇

  • @Massage_Bigdan
    @Massage_Bigdan 2 роки тому +2

    хрень лютейшая . очень бычтрый ролик и не какого айди нетуууууууууу

  • @bgds5848
    @bgds5848 Рік тому

    Ошибка Traceback (most recent call last):
    File "не палю папку", line 7, in
    @bot.message_handlers(content_types=["text"])
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: 'list' object is not callable

  • @iyyy890
    @iyyy890 8 місяців тому

    post = soup.find("article", class_="tm-articles-list__item", id=True) если у вас ошибка с пост id

    • @Digital_Rin
      @Digital_Rin 8 місяців тому

      Здравствуйте, на какую строку нужно вписать эту команду?

    • @user-xr7qu3ji9h
      @user-xr7qu3ji9h 7 місяців тому

      че только не меня ни че не помогает

  • @danilsharafutdinov5769
    @danilsharafutdinov5769 Рік тому

    Почему возникает такая ошибка: @bot.message_handler(content_types=['text'])
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: 'NoneType' object is not callable
    Process finished with exit code 1