Сообщить об ошибке.

Ошибки при чтении и разборе HTML модулем BeautifulSoup4 в Python

Существует два вида ошибок разбора HTML-документа:

  • Сбои, когда подается HTML-документ в конструктор BeautifulSoup(), и это поднимает исключение, обычно HTMLParser.HTMLParseError.
  • Неожиданное поведение, когда дерево разбора BeautifulSoup4 сильно отличается от исходного HTML-документа.

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

Наиболее распространенные ошибки при разборе - это исключения:

  • "HTMLParser.HTMLParseError: malformed start tag"
  • "HTMLParser.HTMLParseError: bad end tag".

Они оба генерируются встроенным в Python парсером html.parser, и решением будет установить lxml или html5lib модули.

Наиболее распространенный тип неожиданного поведения, это когда невозможно найти тег, который точно есть в документе. Вы видели его на входе, но метод .find_all() возвращает [], или .find() возвращает None. Это еще одна распространенная проблема со встроенным в Python HTML-парсером, который иногда пропускает теги, которые он не понимает. Опять же, решение заключается в установке lxml или html5lib.

Проблемы несоответствия версий.

  • Исключение SyntaxError: Invalid syntax (в строке ROOT_TAG_NAME='[document]') вызвано запуском версии BeautifulSoup4 на Python2 под Python3 без конвертации кода.

  • Исключение ImportError: No module named HTMLParser вызвано запуском версия BeautifulSoup4 на Python3 под Python2.

  • Исключение ImportError: No module named html.parser вызвано запуском версия BeautifulSoup4 на Python2 под Python3.

  • Исключение ImportError: No module named BeautifulSoup вызвано запуском кода BeautifulSoup3 в системе, где BeautifulSoup3 не установлен. Или код писали на BeautifulSoup4, не зная, что имя пакета сменилось на bs4.

  • Исключение ImportError: No module named bs4 вызвано запуском кода BeautifulSoup4 в системе, где BeautifulSoup4 не установлен.