C++:
Analysering av HTML

Hvordan:

C++ kommer ikke med innebygd funksjonalitet for parsing av HTML. Du vil ofte bruke et bibliotek som Gumbo-parser fra Google, eller noe lignende. Her er et raskt eksempel ved bruk av Gumbo-parser:

#include <iostream>
#include <gumbo.h>

void search_for_links(GumboNode* node) {
    if (node->type != GUMBO_NODE_ELEMENT) {
        return;
    }
    if (node->v.element.tag == GUMBO_TAG_A) {
        GumboAttribute* href = gumbo_get_attribute(&node->v.element.attributes, "href");
        hvis (href) {
            std::cout << href->value << std::endl;
        }
    }
    GumboVector* barn = &node->v.element.children;
    for (unsigned int i = 0; i < barn->length; ++i) {
        search_for_links(static_cast<GumboNode*>(barn->data[i]));
    }
}

int main() {
    const char* html = "<html><body><a href='https://example.com'>Lenke</a></body></html>";
    GumboOutput* output = gumbo_parse(html);
    search_for_links(output->root);
    gumbo_destroy_output(&kGumboDefaultOptions, output);
    return 0;
}

Eksempel på utdata:

https://example.com

Dypere dykk

Det har ikke alltid vært enkelt å parse HTML i C++. Historisk sett ville programmerere bruke regex eller håndskrevne parser, begge deler er feilutsatte og omstendelige. I dag tar robuste biblioteker som Gumbo-parser seg av kompleksiteten med parsing, noe som gjør det enklere og mer pålitelig.

Alternativer inkluderer Tidy, MyHTML, eller til og med å integrere C++ med Pythons BeautifulSoup via C++ system funksjonen eller innebygde tolkere.

Når det gjelder implementasjon, konverterer disse bibliotekene HTML til et Document Object Model (DOM) tre. Å traversere og manipulere DOM gjør det mulig for brukere å trekke ut og arbeide med data som demonstrert i Hvordan-delen.

Se også