C++:
HTML:n jäsennys
Kuinka:
C++ ei tule sisäänrakennettujen HTML-jäsentämismahdollisuuksien kanssa. Usein käytät kirjastoa, kuten Google:n Gumbo-parser tai vastaavaa. Tässä on nopea esimerkki käyttäen Gumbo-parseria:
#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");
if (href) {
std::cout << href->value << std::endl;
}
}
GumboVector* children = &node->v.element.children;
for (unsigned int i = 0; i < children->length; ++i) {
search_for_links(static_cast<GumboNode*>(children->data[i]));
}
}
int main() {
const char* html = "<html><body><a href='https://example.com'>Linkki</a></body></html>";
GumboOutput* output = gumbo_parse(html);
search_for_links(output->root);
gumbo_destroy_output(&kGumboDefaultOptions, output);
return 0;
}
Esimerkkituloste:
https://example.com
Syväsukellus
HTML:n jäsentäminen ei ole aina ollut suoraviivaista C++:ssa. Historiallisesti ohjelmoijat käyttivät regexiä tai käsinkirjoitettuja jäsentäjiä, jotka molemmat ovat virhealttiita ja kömpelöitä. Nykyään, vankat kirjastot, kuten Gumbo-parser, käsittelevät jäsentämisen monimutkaisuuksia, mikä tekee siitä helpompaa ja luotettavampaa.
Vaihtoehtoja sisältävät Tidy, MyHTML, tai jopa C++:n integroiminen Pythonin BeautifulSoupin kanssa käyttäen C++ system
toimintoa tai upotettuja tulkkeja.
Toteutuksen kannalta, nämä kirjastot muuttavat HTML:n Dokumenttiobjektimalliksi (DOM) puuksi. DOM-puun läpikäyminen ja manipulointi mahdollistaa käyttäjille tietojen poiminnan ja työstämisen, kuten Kuinka-osiossa on esitetty.