Пользователь
57,4
рейтинг
14 августа 2013 в 14:43

Разработка → Google выпустила парсер HTML5 на чистом Си

Удачная возможность для веб-разработчиков выучить язык программирования Си — HTML5-парсер Gumbo, реализованный в виде небольшой библиотеки C99 без внешних зависимостей. Парсер создан как строительный блок для создания других инструментов и библиотек, таких как валидаторы, языки шаблонов, инструменты рефакторинга и анализа кода.

Особенности:
  • Полная совместимость со спецификациями HTML5.
  • Устойчивость к некачественным входным данным.
  • Простые API, которые могут быть легко обработаны программами на других ЯП.
  • Поддержка исходных позиций и указателей в оригинальном коде, при навигации по дереву зависимостей.
  • Проходит все тесты html5lib-0.95.
  • Проверен на более чем 2,5 млрд страниц в индексе Google.

Разработчики не ставят перед собой цели оптимизации парсера для производительности, его писали на Си не для того, чтобы повысить скорость исполнения кода в десятки раз.

В будущем планируется добавить поддержку самых свежих функций HTML5, поддержку парсинга фрагментов кода, полноценные отчёты об ошибках и проч.

Для использования синтаксического анализатора Gumbo, нужно включить файл gumbo.h, а затем вызвать gumbo_parse.

#include "gumbo.h"

int main(int argc, char** argv) {
  GumboOutput* output = gumbo_parse(argv[1]);
  // Do stuff with output->root
  gumbo_destroy_output(&kGumboDefaultOptions, output);
}

Примеры полезного использования см. здесь.

Программа опубликована под лицензией Apache 2.
Анатолий Ализар @alizar
карма
751,5
рейтинг 57,4
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (38)

  • 0
    Валидатор бы еще от гугла хороший, эх.
    • НЛО прилетело и опубликовало эту надпись здесь
  • +47
    Забавно что выложили на github, а не на code.google.com :)
    • +37
      Да, это первое, что бросилось в глаза.
      Видимо в скором времени они закроют и этот сервис. :)
      • +17
        Или купят github
        • +98
          И закроют его :-)
          • –3
            Шутки шутками, но хочу напомнить, что мысль материальна…
            • +22
              Да, мысль материальна как электрохимические взаимодействия в мозге. Мистифицировать здесь нечего.
              • 0
                Она еще материальна в том смысле, что один высказал, типа пошутил, второй задумался, а третий родил очередной закон типа «закрыть все интернеты страны, ибо это вредно».
          • –8
            поскорее бы уже.
      • 0
        А вы были правы… ;)
  • +3
    Может быть, этим парсером, наконец, заменят тот впечатляющий HTML-парсер, который имеет место в PHP сейчас.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Возможно, мы говорим о разных вещах. Я говорю, в частности, о методе DOMDocument::loadHTML(). Что и как вы предлагаете в этом случае выбирать?
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            Да, DOMDocument в части разбора и сохранения HTML-кода — кривая и по сути непригодная для сколь-нибудь серьёзного использования надстройка над libXML.

            Tidy (даже абстрагируясь от того, что он редко бывает по умолчанию доступен на большинстве хостингов) для разбора HTML-кода не предназначен.

            html5lib — чисто скриптовое решение, о недостатках скриптовых решений (главным образом что касается быстродействия) всем нам хорошо известно.

            Достоинство Gumbo в том, что он написан на C (в отличие от Java, на котором написан канонический HTML5-парсер validator.nu, используемый в Firefox путём автоматического преобразования в C++) и потенциально может быть легко интегрирован в PHP (написанный на том же C) вместо существующего HTML-парсера.
            • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Для очистки я нашел для себя прекрасный ezyang/htmlpurifier
              А чтобы что-то выдрать из кода есть phpQuery.
              • +4
                Или есть XPath, например. Мне, кстати, с ним больше понравилось.
                • 0
                  С этим XPath вообще странная ситуация. Как ни посмотришь резюме веб-девелоперов, так у каждого второго значится «XSLT» в списке скиллов. А как пойдёт речь о выборке элемента из HTML документа, так про XPath вспоминают в последнюю очередь.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Если прогнать через tidy, то получается вполне корректный XML документ.
                      • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      А в чем собственно проблема то?

                      Даже в браузере в FireBug можно XPath запускать типа $x("/html/body/title")
                      • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      В конце концов, имея такой инструмент, можно написать свое расширение и помочь миру!
  • +10
    Странно, что не на Golang.
    • +5
      Думаю, это лишь из соображений большей кроссплатформенности C, чем Go…
  • +1
    Это отлично, тем более что есть байндинги на Питон.
    Я вот только не понял — библиотека вроде только html5 парсит. А как быть с более древними HTML 4.01 and XHTML? То-есть получается что применение библиотеки пока узко специализированное.
  • –4
    Грядет новая волна поделий начинающих «какеров».
    Ждем высокоскоростные чекеры, кликеры, спаммеры и т.п. :)
    • +2
      А то Селениума для этого мало?
  • +1
    его писали на Си не для того, чтобы повысить скорость исполнения кода в десятки раз.
    Простите мое невежество, а для чего тогда? Кроссплатформенность?
    • +1
      В оригинале немного иначе написано: скорость большая благодаря Си, но это не главное…

      Execution speed. Gumbo gains some of this by virtue of being written in C, but it is not an important consideration for the intended use-case, and was not a major design factor.
      • 0
        Из этого все равно непонятно, зачем он написан именно на C.
        • 0
          Что бы можно было собрать его под любое устройство.
  • +1
    Никто не хочет его добавить к бенчмарку habrahabr.ru/post/163979/?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.