C++ i HTML

0

Mam kod w C++ który wysyła żądanie HTTP do strony internetowej i odbiera odpowiedź. Np. gdy wyślę żądanie do "www.google.com", otrzymam kod HTMLa tej strony. Pytanie brzmi: jak jakoś, nie wiem, sparsować(?) ten HTML abym mógł z niego wyciągnąć dane, np. język (tag <lang></lang>), i inne. Głównie chcę wyciągać dane z wikipedii. Ewentualnie, jeżeli pod C++ nic nie ma, może być C#.

1

Google wypluwa całkiem sporo bibliotek do parsowania html.

3

Zainteresuj się web scrappingiem.

0

Znalazłem coś, aby przekonwertować HTML do XML i go sparsować. Czy to jest to czego szukam?

0

nie wiem czy dobrze zrozumiałem ale myślę, że rozwiązanie którego szukasz to wyrażenia regularne. Z tego co rozumiem, to chcesz oznaczyć tagi HTML ? Jeżeli tak, to jest jedno wyrażenie regularne które załatwi całą sprawę, a potem piszesz algorytm który odrzuca oznaczone tagi które oznaczyłeś tym wyrażeniem i wyciągasz właściwy tekst który ciebie interesuje. Czy dobrze zrozumiałem to, co chcesz osiągnąć ?

0

W sumie to już znalazłem odpowiedź. Za pomocą biblioteki Tidy konwertuję HTML do XML, a za pomocą libxml2 chcę to sparsować. Jedynie mam problem z libxml2, bo nie wiem jak jej użyć. Pobrałem ją, ale jest tam mnóstwo plików z którymi nie wiem co zrobić. Poza tym to nie wiem jak parsować dokumenty XML w libxml2. Mógłby ktoś pomóc? Nic nie umiem wygooglować.

2

@zkubinski

nie wiem czy dobrze zrozumiałem ale myślę, że rozwiązanie którego szukasz to wyrażenia regularne

https://stackoverflow.com/a/1732454 :-)

0

Mógłby ktoś mi wytłumaczyć ten fragment kodu? (jakiś przykład z Internetu)

static void example3Func(const char *content, int length) {
    xmlDocPtr doc; /* the resulting document tree */

    /*
     * The document being in memory, it have no base per RFC 2396,
     * and the "noname.xml" argument will serve as its base.
     */
    doc = xmlReadMemory(content, length, "noname.xml", NULL, 0);
    if (doc == NULL) {
        fprintf(stderr, "Failed to parse document\n");
	return;
    }
    xmlFreeDoc(doc);
}

A konkretnie to dlaczego w 3 argumencie funkcji xmlReadMemory() jest jakaś nazwa pliku? Ten komentarz wyżej nic mi nie mówi.

0

Ostatecznie:
1 - Pobieram plik *.html za pomocą SFML network.
2 - Zamieniam HTML na XHTML przy użyciu Tidy.
3 - Parsuję XHTML w RapidXML.
4 - Gotowe!

Wszystkim dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1