«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему функции BeautifulSoup, такие как find и select_one, возвращают None?

Почему функции BeautifulSoup, такие как find и select_one, возвращают None?

Опубликовано 22 ноября 2024 г.
Просматривать:859

Why do BeautifulSoup functions like `find` and `select_one` return `None`?

Почему функции BeautifulSoup иногда возвращают None

В BeautifulSoup функции, которые ищут один результат, такие как find и select_one, возвращают None, если соответствующий элемент не найден в HTML. Это приводит к исключениям AttributeError, если последующий код пытается использовать эти значения None, как если бы они были реальными элементами.

Примеры возвращаемых значений None

Рассмотрите следующий фрагмент кода:

html_doc = "..."
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.sister)
print(soup.find('a', class_='brother'))
print(soup.select_one('a.brother'))
soup.select_one('a.brother').text
  • soup.sister: Возвращает None, поскольку в HTML нет тега .
  • soup.find('a', class_='brother'): возвращает None, поскольку нет тегов с атрибутом class "брат."
  • soup.select_one('a.brother'): возвращает None по той же причине, что и суп.find(...).
  • soup.select_one('a.brother').text: Вызывает ошибку AttributeError, поскольку None не имеет текста атрибут.

Как избежать ошибки AttributeError: объект 'NoneType' не имеет атрибута...

Чтобы избежать исключений AttributeError, важно правильно обрабатывать возвращаемые значения None. Вот несколько рекомендаций:

  • Используйте условные операторы, чтобы проверить, равен ли результат None, прежде чем пытаться получить доступ к атрибутам.
  • Назначьте результат переменной и используйте .has_attr() для проверьте наличие определенного атрибута.
  • Используйте блоки try и кроме для перехвата исключений AttributeError.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3