The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Компания Google открыла код Gumbo, библиотеки для парсинга HTML

14.08.2013 13:53

Компания Google представила новую открытую библиотеку Gumbo, предоставляющую набор функций для разбора HTML, построенных на реализации алгоритма парсинга, описанного в стандарте HTML5. Код опубликован под лицензией Apache 2.0.

В отличие от прошлых спецификаций HTML, стандарт HTML5 определяет единый алгоритм разбора HTML, позволяющий унифицировать работу парсера в различных браузерах. Проблема заключается в том, что существующие реализации алгоритма HTML5 либо привязаны к конкретным реализациям браузеров или движков рендеринга, что затрудняет их обособленное использование, либо написаны на скриптовых языках, что не позволяет добиться приемлемой производительности. Реализованный в Gumbo парсер проходит все тесты html5lib-0.95 и готов для использования в качестве отдельного продукта.

Библиотека написана на языке Си и не требует для своей работы внешних зависимостей, что делает её интересным решением для использования в качестве основы для построения различных инструментов для проверки корректности, рефакторинга и анализа HTML, создания шаблонизаторов и других программ, манипулирующих разметкой HTML. Предоставляемый Gumbo API предельно прост и может использоваться для создания обёрток для различных языков программирования (в настоящее время поддерживаются языки Си и Python). Библиотека позиционируется как стабильная - код уже используется в промышленной эксплуатации для работы с поисковыми индексами Google.

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

  1. Главная ссылка к новости (http://google-opensource.blogs...)
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/37658-gumbo
Ключевые слова: gumbo, parse, html
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (34) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.7, meequz (ok), 15:21, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Забавно, что выложілі на гітхаб, а не на свой гуглокод.
     
     
  • 2.10, Аноним (-), 16:10, 14/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Они давно туда выкладывают свой код
     
  • 2.42, Аноним (-), 03:07, 22/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Очевидно же - гуглокод нафиг никому не сдался, ибо чтобы там запостить банальный баг нужно подписывать гугловскую EULA, никто в здравом уме этого делать не будет.
     

  • 1.11, chinarulezzz (ok), 16:14, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    гугл не отбирает у своих разработчиков возможность использовать те инструменты, которые им удобны.

    linux//windows/macosx/etc, vim/emacs/eclipse/netbeans/etc. Что угодно.

     
     
  • 2.22, CAP (?), 22:58, 15/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    от windows они отказались вроде официальная инфа была
     

  • 1.12, Маша Слонина (?), 18:33, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот за что я люблю google для python сразу есть обертка.
     
     
  • 2.16, kurokaze (ok), 23:42, 14/08/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Вот за что я люблю google для python сразу есть обертка.

    Хвалю, вот бы и все остальные владельцы собак так поступали

     

  • 1.13, arisu (ok), 21:38, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    чёрт, действительно на чистом си! надо присмотреться. а то libsgml ночами ссытся в постель, хоть и старается изо всех сил чтобы «как у взрослых».
     
  • 1.14, u (?), 22:22, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лицензия, как всегда.
     
     
  • 2.24, Kibab (ok), 18:21, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что с ней не так?
     
     
  • 3.26, arisu (ok), 22:34, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > А что с ней не так?

    GPL лучше была бы. но дареной библиотеке в лицензии не заглядывают.

     

  • 1.15, Aleksey Salow (ok), 23:27, 14/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    я так понимаю с невалидным html будет тяжко.
     
     
  • 2.17, arisu (ok), 23:44, 14/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > я так понимаю с невалидным html будет тяжко.

    ты бы правила разбора html5 почитал, что ли… «пониматель».

     

  • 1.18, arisu (ok), 10:09, 15/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    посоны, аккуратно, там ошибка! ну, то есть, в библиотеке. нефатальная, но при некоторых условиях можете получить бредовые имена атрибутов.
     
     
  • 2.19, Аноним (-), 11:12, 15/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Ссылку на репорт можно?
     
     
  • 3.20, arisu (ok), 11:33, 15/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Ссылку на репорт можно?

    нет. у меня нет и не будет аккаунта на гитхабе, а нормального багтрекера, куда пускают анонимусов, люди не дают.

    хинт: два атрибута с одинаковым именем и значением, идущие подряд друг за другом, дают забавный результат в attribute->name.

     
     
  • 4.21, arisu (ok), 11:36, 15/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > хинт: два атрибута с одинаковым именем и значением, идущие подряд друг за
    > другом, дают забавный результат в attribute->name.

    в смысле: attr="value" attr="value" another_attr="another_value"
    будет маленькая забавка.

     
  • 4.25, Kibab (ok), 18:22, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это ты об анонимности так печёшься или просто нечего класть? :-)
     
     
  • 5.27, arisu (ok), 22:36, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это ты об анонимности так печёшься или просто нечего класть? :-)

    алё, дурилка, ты тесткейз и патч видел? прямо в этой теме. уж наверное можно проверить.

     
     
  • 6.39, Kibab (ok), 02:25, 17/08/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Это ты об анонимности так печёшься или просто нечего класть? :-)
    > алё, дурилка, ты тесткейз и патч видел? прямо в этой теме. уж
    > наверное можно проверить.

    Да не переживай ты так :-)) Вон, видишь, даже забыл, на какой вопрос отвечаешь.

     
     
  • 7.40, arisu (ok), 02:34, 17/08/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Rasch abkochen, dann Vormarsch nach Sokal.
     
  • 2.23, arisu (ok), 23:43, 15/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    багфикс, котаны:



    diff --git a/src/tokenizer.c b/src/tokenizer.c
    index c5547bd..ec19d8b 100644
    --- a/src/tokenizer.c
    +++ b/src/tokenizer.c
    @@ -815,6 +815,7 @@ static void finish_attribute_value(GumboParser* parser) {
         // Duplicate attribute name detected in an earlier state, so we have to
         // ignore the value.
         tag_state->_drop_next_attr_value = false;
    +    reinitialize_tag_buffer(parser);
         return;
       }




     
     
  • 3.43, Аскар Сафин (?), 15:01, 06/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Пофиксили
    https://github.com/google/gumbo-parser/commit/3068711413b52c515a9fa549b258d690
     
     
  • 4.44, arisu (ok), 16:39, 06/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Пофиксили

    угу. молодцы, хорошо работают. а могли бы ещё лучше.

     

  • 1.28, ssd3 (?), 22:46, 16/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    пару дней назад решил попробовать эту либу в проекте mosync, сборка и использование без всяких вопросов за счет c99, чистенько :)
     
     
  • 2.29, arisu (ok), 22:49, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    грязненько, потому что целых два варнинга.
     
     
  • 3.31, ssd3 (?), 22:55, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а если точнее, то у меня 3 warnings было
     
     
  • 4.32, arisu (ok), 22:59, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > а если точнее, то у меня 3 warnings было

    а третий-то откуда? один — из-за отсутствия return после switch'а (хотя туда и не дойдёт никогда). второй — из-за забытой переменной node. а третий?

     
     
  • 5.33, ssd3 (?), 23:02, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> а если точнее, то у меня 3 warnings было
    > а третий-то откуда? один — из-за отсутствия return после switch'а (хотя туда
    > и не дойдёт никогда). второй — из-за забытой переменной node. а
    > третий?

    parser.c:3049: warning: array subscript has type 'char'
    parser.c:1550: warning: control reaches end of non-void function
    tag.c:205: warning: array subscript has type 'char'

     
     
  • 6.35, arisu (ok), 23:04, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    это что у тебя за компилятор такой, милчеловек, который неиспользованое значение переменной провтыкал, а на совершенно нормальный код ругается не по делу, как пьяный извозчик? O_O

    интересно просто.

    p.s. нечто gcc древний какой?

     
     
  • 7.37, ssd3 (?), 23:17, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > это что у тебя за компилятор такой, милчеловек, который неиспользованое значение переменной
    > провтыкал, а на совершенно нормальный код ругается не по делу, как
    > пьяный извозчик? O_O
    > интересно просто.
    > p.s. нечто gcc древний какой?

    да, древний )
    gcc version 3.4.6

     
  • 6.36, arisu (ok), 23:06, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    в clear_stack_to_table_body_context() ребята явно хотели использовать node, но забыли. мой gcc удивился.
     
  • 2.30, arisu (ok), 22:50, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    p.s. багфикс накати.
     
  • 2.34, arisu (ok), 23:03, 16/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > пару дней назад решил попробовать эту либу в проекте mosync, сборка и
    > использование без всяких вопросов за счет c99, чистенько :)

    а вообще, после libsgml несколько напрягает отсутствие ссылок на sibling'ов. пришлось, чтобы логику программы не особо ломать, кидаться не просто указателем на ноду, а структурой «нода, индекс в родителе».

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру