LINUX.ORG.RU

с++ парсер HTML


0

1

Пишу приложение на C++/Qt, которое будет время от времени делать HTTP запрос на указанный URL, парсить результат и отображать несколько полей из HTML таблицы. Поэтому возникает задача парсинга полученного документа. В Ruby для похожей задачи использовал Nokogiri, подскажите пожалуйста - есть ли что-то похожее в C++? Желательно с минимальным количеством зависимостей и поближе к Qt (если есть какой-то класс из Qt который реализует желаемое - будет совсем круто). Библиотека должна строить DOM дерево из указанной строки и позволять оперировать с HTML-элементами с помощью CSS-селекторов. Это должна быть именно backend библиотека, отобржать полученный html не надо.

ну гугл же епть... Все это есть, и именно в таком виде как ты хочешь.

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

Goganchic

если есть какой-то класс из Qt который реализует желаемое - будет совсем круто

QWebElement

Kosyak

Причем в QtXml ещё и два варианта парсера.

Разве оно умеет парсить HTML, который не является корректным XML документом?

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

Разве оно умеет парсить HTML, который не является корректным XML документом?

XMLReader, использующий LibXML, пишется за полчаса. После чего невалидный HTML больше не проблема.

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

А вот что лучше - создавать свой велосипед, который тянет за собой libxml или воспользоваться готовым парсером из QtWebkit - это еще большой вопрос.

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

Если критерий ресурсоемкости исключительно память, то думаю решение с libxml2 имеет преимущества, т.к. libQtWebKit весит около 27 Мб, в то время, как libQtXml + libxml2 вместе меньше 2 Мб. Только вот если программе требуется еще и рендерить HTML, то тут вебкит конечно чуть ли не единственный вариант.

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

Если критерий ресурсоемкости исключительно память, то думаю решение с libxml2 имеет преимущества, т.к. libQtWebKit весит около 27 Мб, в то время, как libQtXml + libxml2 вместе меньше 2 Мб.

Размер бинарника не имеет ничего общего с потреблением памяти.

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

Размер бинарника не имеет ничего общего с потреблением памяти.

Бинарник внутри может содержать секции кода и данных, которые загружаются в память, а следовательно ее потребляют. Конечно там присутствует и служебная информация, но ее количественное отношение ко всему остальному пренебрежимо мало.

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

Хотя это не совсем то, что нужно. Dom можно строить вебкитом.

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

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

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

меньше размера бинарника потребление не будет, в общем случае

ты считаешь расход памяти по vmsize, что ли?

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

Из библиотеки в память загружаются только используемые страницы

Еще раз - сначала библиотека загружается ELF-загрузчиком в память, а уже только потом начинает выполняться код, который может выделять память в куче и т.п.

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

все страницы, к которым идёт интенсивный доступ будут в раме
иначе тормоза
как думаете много ли в такой либе «лишнего» кода, который можно сбросить в своп при её работе
по моим наблюдениям, при линковке с той же glibc, даже при вызове единственной ф-и, навроде memcmp, которая точно не зависит ни от чего в либе
rss процесса составляет немного менее размера /lib64/libc-2.14.1.so
хотя тот же бинарь, слинкованый без libc занимает 4k rss

как объясните?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.