HtmlParser — это библиотека на C++ для парсинга и обработки HTML-документов.
Она предоставляет удобный API для разбора HTML, построения DOM-дерева, поиска элементов и работы с тегами.
- Разбор HTML-строк и файлов
- Построение DOM-дерева
- Поиск и выборка узлов по тегам и атрибутам
- Обработка ошибок парсинга
- Удобная работа с HTML-тегами и атрибутами
src/parser/— основной парсер, DOM-узлы, обработка исключенийsrc/tokenizator/— токенизация HTML, работа с токенами
Добавьте библиотеку в свой проект через add_subdirectory:
add_subdirectory(HtmlParser)
target_link_libraries(ваша_цель PRIVATE htmlparser)И добавьте include-директории:
target_include_directories(ваша_цель PRIVATE
${CMAKE_SOURCE_DIR}/HtmlParser/src/parser
${CMAKE_SOURCE_DIR}/HtmlParser/src/tokenizator
)#include "html_parser.h"
int main() {
HtmlParser parser;
auto dom = parser.parse("<html><body><h1>Привет!</h1></body></html>");
return 0;
}HtmlParser parser(L"<div><span>1</span><span>2</span></div>");
auto spans = parser.getAllElement(L"span");
for (auto* node : spans) {
std::wcout << (*node)[L"innerText"] << std::endl;
}HtmlParser parser(L"<div class='main'><span class='main'>A</span><span>B</span></div>");
auto mainClass = parser.getAllElement(L".main");
for (auto* node : mainClass) {
std::wcout << (*node)[L"name"] << L": " << (*node)[L"innerText"] << std::endl;
}HtmlParser parser(L"<div id='header'><span>Title</span></div>");
auto header = parser.getFirstElement(L"#header");
if (header) {
std::wcout << (*header)[L"name"] << std::endl;
}HtmlParser parser(L"<div><span class='main'>A</span><span class='other'>B</span></div>");
auto query = parser.getAllElement(L"span.main");
for (auto* node : query) {
std::wcout << (*node)[L"innerText"] << std::endl;
}HtmlParser parser(L"<div><span id='unique'>A</span><span>B</span></div>");
auto node = parser.getFirstElement(L"span#unique");
if (node) {
std::wcout << (*node)[L"innerText"] << std::endl;
}HtmlParser parser(L"<div><span class='main'>A</span><span id='unique'>B</span></div>");
auto nodes = parser.getAllElement(L"span.main,span#unique");
for (auto* node : nodes) {
std::wcout << (*node)[L"innerText"] << std::endl;
}HtmlParser parser(L"<div class='main'><span><b>Bold</b></span></div>");
auto nodes = parser.getAllElement(L"div.main span b");
for (auto* node : nodes) {
std::wcout << (*node)[L"innerText"] << std::endl;
}Синтаксис запроса:
tag— по тегу.class— по классу#id— по idtag.class— тег с классомtag#id— тег с idtag1 tag2— вложенностьquery1,query2— несколько запросов
Используйте методы:
getAllElement(L"запрос")— получить все подходящие элементыgetFirstElement(L"запрос")— получить первый подходящий элемент