ur001
@ur001
Программист. Искатель. Сноб. Социальный ассоциатор

Beautiful Soup, html5lib или lxml?

Предполагается использование для парсинга пользовательского контента. Соответственно, основное требование — корректная обработка битого HTML. Скорость не критична.

В документации lxml есть вот что:
  1. BeautifulSoup Parser
  2. html5lib Parser

Т.е. оно может парсить с помощью этих библиотек и возвращать дерево lxml. В доках html5lib же сказано:
Support for minidom, ElementTree (including cElementTree and lxml.etree), BeautifulSoup (deprecated) and custom simpletree output formats

Мне скорее всего нужно будет пробегаться по всему DOM-у, думаю SAX будет удобным. Даже так: пробежаться SAX-ом и построить новое дерево с применением определённых фильтрующих-преобразующих правил и типографированием текста.

Вот в раздумье. Подскажите что выбрать?
  • Вопрос задан
  • 11732 просмотра
Решения вопроса 1
@kmike
У html5lib самый корректный и надежный парсер (по спецификации), но она медленная. lxml быстрее всех и парсит достаточно хорошо. Вместо SAX можно iterparse использовать, это удобнее часто, и часто быстрее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alternativshik
@alternativshik
lxml однозначно.
Ответ написан
Комментировать
pawnhearts
@pawnhearts
вообще-то beautifulsoup какраз для битого html разрабатывался, незнаю почему от неё отговаривают.
Ответ написан
@kmike
@ur001, посмотрел еще раз код lxml, там есть много всяких регекспов, разбросанных по модулям ( github.com/lxml/lxml/blob/master/src/lxml/html/clean.py#L62 ), но я был не прав совершенно: парсинг html в lxml основан большей частью на парсинге xml.

Т.е. lxml считает, что html — это просто невалидный xml, который можно поправить. С теоретической точки зрения предположение неверное, для парсинга html5 и xml нужны совсем разные парсеры, но на практике часто работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы