Я писал некоторые коды для получения данных с некоторых страниц на Java, и Jsoup был одной из лучших библиотек для работы. Но, к сожалению, я должен перенести весь код на C / C ++. Но я не могу найти какой-либо достойный HTML-парсер для использования на C ++. Есть ли какая-нибудь Jsoup-подобная библиотека для C ++ или как можно достичь подобных результатов?
[В настоящее время я использую Curl для получения источника страниц и роуминга в интернете, чтобы найти html-парсер]К сожалению, я думаю, что нет парсера, как Jsoup для C ++ …
Помимо библиотек, которые уже упоминались здесь, здесь есть хороший обзор синтаксического анализатора C ++ (и некоторых C): Бесплатные библиотеки синтаксического анализатора C или C ++ XML
Для разбора я использовал TinyXML-2 для (Html-) DOM-анализа; это очень маленькая (всего 2 файла) библиотека, которая работает на большинстве ОС (даже не на рабочем столе).
Если вы находитесь на C ++ CLI, проверьте NSoup — порт Jsoup для .NET.
Еще немного:
Может быть, вы можете объединить DOM Model / Parser и CSS-селектор вместе?
Если вы знакомы с Qt Framework, наиболее удобным способом является использование QWebElement (Ссылка Вот).
В противном случае (как предлагает другой пост) использование Аккуратный преобразовать HTML в действительный XML, а затем с помощью синтаксического анализатора XML, такого как LibXML ++ хороший вариант Вы можете найти пример кода, показывающий эти два шага Вот.
Хром имеет открытый исходный код синтаксический анализатор. Так же Гумбо-парсер гугл выглядит круто.
Ты можешь использовать Xerces2 как DOM-парсер.
Или использовать HTML Tidy очистить HTML и преобразовать его в XHTML, а затем проанализировать XML с pugixml или подобный анализатор XML. А так как pugixml — не проверяющий парсер, он может также работать с необработанным HTML без необходимости запуска HTML Tidy в первую очередь.
Если вы не возражаете вызывать Python из C ++, вы можете использовать Красивый суп. По крайней мере, имя правильно!
Серьезно — это хороший, не бессмысленный анализатор HTML. Я не пробовал вызывать его из C ++, хотя должен быть простым.