Jsoup, как html-парсер для С++
Я писал несколько кодов, чтобы получить некоторые данные с некоторых страниц на Java, а Jsoup - из лучших библиотек для работы. Но, к сожалению, мне приходится переносить весь код на C/С++. Но я не могу найти достойный html-парсер для использования на С++. Есть ли какая-нибудь Jsoup-библиотека для С++ или Как можно достичь аналогичных результатов?
[В настоящее время я использую Curl для получения источника страниц и роуминга в Интернете, чтобы найти парсер html]
Ответы
Ответ 1
К сожалению, я думаю, что нет синтаксического анализатора, подобного Jsoup для С++...
Помимо библиотек, которые уже упоминаются здесь, есть хороший обзор синтаксического анализа С++ (некоторые C): Бесплатный C или С++ XML Parser Библиотеки
Для анализа я использовал TinyXML-2 для (Html-) разбора DOM; это очень маленькая (всего 2 файла) библиотека, которая работает на большинстве ОС (даже не на рабочем столе).
LibXml
- анализатор push и pull (DOM, SAX)
- Проверка
- Поддержка XPath и XPointer
- Cross-Plattform/хорошая документация
Apache Xerxces
- анализатор push и pull (DOM, SAX)
- Проверка
- Нет поддержки XPath (но пакет для этого?)
- Cross-Plattform/хорошая документация
Если вы находитесь на С++ CLI, посмотрите NSoup - порт Jsoup для .NET.
Еще несколько:
Возможно, вы можете объединить DOM Model/Parser и селектор CSS вместе?
Ответ 2
Если вы знакомы с Qt Framework, наиболее удобным способом является QWebElement (Reference здесь).
В противном случае (как предлагает другой пост) с помощью Tidy, чтобы преобразовать HTML в допустимый XML и затем использовать синтаксический анализатор XML, такой как libxml ++ - хороший вариант. Вы можете найти пример кода, показывающий эти два шага здесь.
Ответ 3
У Chromium есть парсер с открытым исходным кодом. Также гум-парсер Google выглядит круто.
Ответ 4
Вы можете использовать xerces2 как парсер DOM.
Или используйте HTML Tidy, чтобы очистить HTML и преобразовать его в XHTML, затем проанализировать XML с помощью pugixml или аналогичный синтаксический анализатор XML. И поскольку pugixml является не проверяющим синтаксический анализатор, он может также работать с необработанным HTML без необходимости запускать HTML Tidy на нем в первую очередь.
Ответ 5
Если вы не возражаете позвонить на python из С++, вы можете использовать Beautiful Soup. По крайней мере, имя правильно!
Серьезно - это хороший, без излишеств HTML-парсер. Я не пробовал обращаться к нему с С++, хотя это должно быть прямо.
Ответ 6
Да, существует библиотека парсера html для c++, проверьте ее https://github.com/HamedMasafi/HtmlParser/
Эта библиотека может анализировать html или css и преобразовывать ее в древовидную модель. Вы можете выполнять поиск в разобранном html такими методами, как: get_by_id, get_by_class_name, get_by_tag_name, а также существует метод вопросов, который вы можете искать с помощью селектора css (на данный момент поддерживаются только теги, id, класс, вложенные дочерние селекторы).
Найдя ребенка, вы можете изменить его атрибуты и, наконец, вы можете напечатать html в std :: string в компактном и симпатичном режиме.