LINUX.ORG.RU

lexbor 2.2.0 - библиотека парсинга HTML и CSS

 , , lexbor, ,


4

1

6 апреля, после 20 месяцев разработки, состоялся выпуск 2.2.0 библиотеки парсинга HTML и CSS lexbor, написанной на языке C.

Что нового:

  • добавлены функции клонирования узлов DOM и HTML;
  • добавлена возможность переопределения функций управления памятью;
  • добавлен парсинг CSS стилей, деклараций и свойств;
  • для элементов HTML добавлены события вставки, удаления и уничтожения;
  • добавлен парсинг стилей внутри тега style;
  • при изменении элемента его стиль вычисляется заново;
  • добавлены примеры парсинга стилей.

Исправления:

  • исправлена сериализация текстовых нод HTML без «родителя»;
  • исправлены поиск и получение тега title;
  • исправлено добавление атрибутов для сторонних элементов HTML;
  • устранены различные утечки памяти;
  • исправлена возможность сборки в Windows.

Изменения:

  • минимальная версия CMake — 2.8.12;
  • полностью изменён подход к парсингу CSS;
  • удалены файлы XCode.

Лицензия: Apache 2.0.

Сайт проекта: https://lexbor.com.

Пример использования:

#include <lexbor/html/parser.h>
#include <lexbor/dom/interfaces/element.h>


int main(int argc, const char *argv[])
{
    lxb_status_t status;
    const lxb_char_t *tag_name;
    lxb_html_document_t *document;

    static const lxb_char_t html[] = "<div>Work fine!</div>";
    size_t html_len = sizeof(html) - 1;

    document = lxb_html_document_create();
    if (document == NULL) {
        exit(EXIT_FAILURE);
    }

    status = lxb_html_document_parse(document, html, html_len);
    if (status != LXB_STATUS_OK) {
        exit(EXIT_FAILURE);
    }

    tag_name = lxb_dom_element_qualified_name(lxb_dom_interface_element(document->body), 
                                               NULL);

    printf("Element tag name: %s\n", tag_name);

    lxb_html_document_destroy(document);

    return EXIT_SUCCESS;
}

Исходный текст: https://github.com/lexbor/lexbor.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 3)
Ответ на: комментарий от qbbr

Даже Гугловский Gumbo давно не торт.

А специально «заточенные» парсеры лучше, чем XPath.

dataman ★★★★★
() автор топика

минимальная версия CMake — 2.8.12;

Когда поддержка GNU Autotools будет?

zx_gamer ★★★
()
Ответ на: комментарий от qbbr

ИксПуть жэ есть на щях

Топикастер судя по всему не в курсе что к чему. Изначальная цель этого проекта разработка веб-браузера на сях. Началась затея лет 5 назад, а может и того больше. Автор начал со всяких парсеров и на них же судя по всему закончил.

Но если нужно 100500 потоков в секунду на одном сервере не обмазываясь смузи и микросервисами, то наверное создавать дом дерево перед фильтрацией не самая лучшая затея. Но людям нравится, ну и Бог с ними… Хотя может что уже поменялось?

foror ★★★★★
()
Ответ на: комментарий от Xant1k

Да, нехорошо. Одну добавил! :)

dataman ★★★★★
() автор топика

6 апреля, после 20 месяцев разработки, состоялся выпуск 2.2.0 библиотеки парсинга HTML и CSS lexbor, написанной на языке C.

Мда, такой парсер с нуля за неделю пишется... а то и быстрее. Надеюсь там хоть есть поддержка штук вида <b>1<u>2</b>3</u> и прочих отклонений от строгости, а не тупо конвертер текста в dom.

минимальная версия CMake — 2.8.12;

Ещё раз мда.

firkax ★★★★★
()
Ответ на: комментарий от foror

Изначальная цель этого проекта разработка веб-браузера на сях.

Учитывая, что html-парсер это меньше 1% от сложности браузера, и занял он 5 лет, браузер стоит ждать не раньше 2500 года.

firkax ★★★★★
()
Ответ на: комментарий от Somebody

Было стыдновато прогать копипастой из стековерфлоу, теперь прогрессивно и почётно копипастой из чатгпт и прочих копилотов. С таким подходом можно за вечер набыдлокодить

Logopeft ★★
()
Ответ на: комментарий от Somebody

Ты серьёзно думаешь что распарсить совершенно простой синтаксис html/css и построить по тегам дерево это какая-то сверхсложная задача? На чём там задержаться то вообще можно? Мне кроме того факта, что у html синтаксис разных тегов чуть отличается (ну там какие-то с закрывающими, какие-то без, у каких-то надо автоматически проставлять закрывающие если в коде их нет, а где-то и открывающие, ну итд), ничего в голову не приходит. Но и это не так что бы большая проблема.

firkax ★★★★★
()
Ответ на: комментарий от foror

Хотя может что уже поменялось?

да вроде всё по-старому

qbbr ★★★★★
()

Почитал комментарии, удивился.

Тот кто считает, что эффективный HTML парсер можно написать за неделю — показывает свой уровень некомпетентности. Организовать тесты, поддержка многих ОС, пакеты и прочее. Это большой технологический процесс.

К сожалению, или счастью, но браузерный движок состоит из кучи разнообразных парсеров (html, css, url, encoding, font and so on). Задача не только распарсить всё это эффективно, но и «скрестить» между собой.

Сейчас успешно «скрещены» DOM+HTML+CSS+ENCODING. Кто не ленивый уже может брать код и рисовать свой хтмл. Одна толко разработка эффективного парсера CSS с методиками тестирования используя грамматики для формирования тестов тянет на не малую статью.

Про «пять лет пишется». С определенного момента работы в NGINX (после продажи) я практически не занимался своим проектом lexbor. По своду разных причин. Сейчас всё активно разрабатывается. Скоро появится вменяемый layout.

Сайт lexbor.com давно не обновлялся, roadmap там сильно устаревший. Не хватает на всё времени. Обновлю на днях.

lexbor
()
Ответ на: комментарий от firkax

«Личным примером», пожалуйста.

Покажи твой «леХковозводимый» вариант библиотеки парсинга HTML и CSS — и я поаплодирую тебе стоя. :)

А так-то «не мешки таскать» у нас много «мастеров», сынок…

Somebody ★★
()
Ответ на: комментарий от Logopeft

А шоб ещё и работало? ;) За сколько… гмм.. «вечеров»?.. :)

Somebody ★★
()
Ответ на: комментарий от Somebody

Использую Chrome.
Что касаемо сети, то пакет TCP проходит через разные узлы прежде чем достигнет требуемого.
У вас запрос может быть успешен, а у меня нет.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от Forum0888

Да это-то я знаю. мне азбуку «разжёвывать» нет нужды. Но какая тут связь с сохранением файла через «Save as»?? Это ведь так же далеко от сети, сетевых протоколов и маршрутизации, как… гмм… как чайная церемония от выпиливания лобзиком. :)

Somebody ★★
()
Последнее исправление: Somebody (всего исправлений: 1)
Ответ на: комментарий от Somebody

А файл, где находится?

<a href=«/downloads/uClibc-0.9.33.2.tar.xz»>0.9.33.2 release</a>

Кстати попробовал еще раз «Сохранить как ...».
Файл сохраняется, а часа два назад «Сохранить как ...» не сохранял файл.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от Forum0888

А файл, где находится?

0.9.33.2 release

Это был вопрос или ответ? :)

Да, именно там, и именно этот. Другие с той же страницы, впрочем, тоже загружались-сохранялись без проблем.

Кстати попробовал еще раз «Сохранить как …».

Файл сохраняется, а часа два назад «Сохранить как …» не сохранял файл.

Ну вот видите! А у меня сразу же сохранялось всё оттуда. Думаю, что это «проблемы на местах», а не на сайте…

Somebody ★★
()
Ответ на: комментарий от Somebody

Думаю, что это «проблемы на местах»,

Безусловно.
Для анализа логи нужны, ...
Капризный вэб однако (это конечно шутка).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.