Здравствуйте. Мне нужна помощь с ошибкой при парсинге сайта для создания бота в Telegram. Хочу отправлять новости с определенного сайта, но сталкиваюсь с проблемой.

Как избежать ошибки TypeError: 'NoneType' object is not subscriptable при выполнении данного кода?
```python
import requests
from bs4 import BeautifulSoup

URL = "https://habr.com/ru/search/?target_type=posts&q=py..."

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

post = soup.find("li", "", id=True)
post_id = post["id"]

post = soup.find("li", class_="tm-article-snippet tm-article-snippet", id=True)
post_id = post["id"]

title = post.find("a", class_="post__title_link").text.strip()
description = post.find("div", class_="post__text post__text-html post__text_v1").text.strip()
url = post.find("a", class_="post__title_link", href=True)["href"].strip()
```
  • 12 ноября 2023 г. 21:59
Ответы на вопрос 2
Ошибка TypeError: 'NoneType' object is not subscriptable возникает, когда вы пытаетесь обратиться к свойству или элементу, которого нет в объекте типа None. В данном случае, ошибка может возникнуть в нескольких местах.

1. Если найденный элемент `post` равен None, то вы пытаетесь обратиться к его свойству "id" и присвоить его значение переменной `post_id`. 
   Чтобы избежать этой ошибки, можно добавить проверку на None перед обращением к свойству:
   ```python
   if post is not None:
       post_id = post["id"]
   else:
       # обработать ситуацию, когда элемент не найден
   ```

2. Если элементы `title`, `description`, `url` не найдены, то вы также получите ошибку TypeError при обращении к их свойствам. Вам также нужно добавить проверки на None перед обращением к свойствам:
   ```python
   if post is not None:
       title = post.find("a", class_="post__title_link")
       if title is not None:
           title = title.text.strip()
       else:
           # обработать ситуацию, когда элемент не найден
       
       description = post.find("div", class_="post__text post__text-html post__text_v1")
       if description is not None:
           description = description.text.strip()
       else:
           # обработать ситуацию, когда элемент не найден
       
       url = post.find("a", class_="post__title_link", href=True)
       if url is not None:
           url = url["href"].strip()
       else:
           # обработать ситуацию, когда элемент не найден
   else:
       # обработать ситуацию, когда элемент не найден
   ```

Добавьте эти проверки в свой код, чтобы избежать ошибки TypeError.
Загляните в [https://habr.com/robots.txt](https://habr.com/robots.txt) и ознакомьтесь с его содержимым для работы с данным сайтом. В коде страницы можно найти ссылку на [https://habr.com/ru/rss/articles/?fl=ru](https://habr.com/ru/rss/articles/?fl=ru), где можно прочитать rss-ленту. Рекомендуется сохранять новые аннотации локально и выполнять поиск по базе данных, чтобы избежать частых обращений к сайту.
Похожие вопросы