@flexpc

Почему не работает парсер?

Парсю сайт школы для Telegram бота и что-то где-то не сходиться, не могу понять что.
Выложу весь код потому что он не большой.
import telebot
import requests
import time

from bs4 import BeautifulSoup

token = "*"
bot = telebot.TeleBot("*")
#токен вместо звездочек


@bot.message_handler(content_types=['text'])
def commands(message):
    if message.text == "Старт":
        back_post_id = 0
        while True:
            post_text = parser(back_post_id)
            back_post_id = post_text[1]

            if post_text[0] != None:
                bot.send_message(post_text[0])
                time.sleep(300)
    else:
        bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши Старт")


def parser(back_post_id):
    URL = "https://sch121uz.mskobr.ru/novosti"

    page = requests.get(URL)
    soup = BeautifulSoup(page.content, "html.parser")

    post = soup.find("div", class_="kris-news-box", id=True)
    post_id = post["id"]

    if post_id != back_post_id:
        title = post.find("div", class_="kris-news-tit").text.strip()
        description = post.find("div", class_="kris-news-body").text.strip()
        url = post.find("a", class_="link_more", href=True)["href"].strip()

        return f"{title}\n\n{description}\n\n{url}", post_id
    else:
        return None, post_id


bot.polling()


появляется ошибка
Traceback (most recent call last):
  File "C:/Users/Andrew/PycharmProjects/SchoolBot/bottg.py", line 45, in <module>
    bot.polling()
  File "C:\Users\Andrew\PycharmProjects\SchoolBot\venv\lib\site-packages\telebot\__init__.py", line 658, in polling
    self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
  File "C:\Users\Andrew\PycharmProjects\SchoolBot\venv\lib\site-packages\telebot\__init__.py", line 720, in __threaded_polling
    raise e
  File "C:\Users\Andrew\PycharmProjects\SchoolBot\venv\lib\site-packages\telebot\__init__.py", line 680, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "C:\Users\Andrew\PycharmProjects\SchoolBot\venv\lib\site-packages\telebot\util.py", line 135, in raise_exceptions
    raise self.exception_info
  File "C:\Users\Andrew\PycharmProjects\SchoolBot\venv\lib\site-packages\telebot\util.py", line 87, in run
    task(*args, **kwargs)
  File "C:/Users/Andrew/PycharmProjects/SchoolBot/bottg.py", line 16, in commands
    post_text = parser(back_post_id)
  File "C:/Users/Andrew/PycharmProjects/SchoolBot/bottg.py", line 33, in parser
    post_id = post["id"]
TypeError: 'NoneType' object is not subscriptable

Помогите решить пожалуйста
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 1
drygdryg
@drygdryg
Python-разработчик
В коде страницы присутствует такой элемент:
<div class="kris-news-box">…</div>
Этот элемент не имеет атрибута id, но вы указали парсеру на то, что id должен присутствовать (id=True).
Замените соответствующую строку в своём коде на:
post = soup.find("div", class_="kris-news-box")
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы