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-ом и построить новое дерево с применением определённых фильтрующих-преобразующих правил и типографированием текста.

Вот в раздумье. Подскажите что выбрать?
  • Вопрос задан
  • 9433 просмотра
Решения вопроса 1
@kmike
У html5lib самый корректный и надежный парсер (по спецификации), но она медленная. lxml быстрее всех и парсит достаточно хорошо. Вместо SAX можно iterparse использовать, это удобнее часто, и часто быстрее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
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 нужны совсем разные парсеры, но на практике часто работает.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Sveak Барнаул
от 50 000 руб.
Сайтсофт Екатеринбург
от 50 000 руб.
от 50 000 руб.
20 янв. 2020, в 11:04
1000 руб./в час
20 янв. 2020, в 10:31
400 руб./в час
20 янв. 2020, в 10:29
100000 руб./за проект