HTML code einlesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • HTML code einlesen

    Hi

    Ich habe in der Schule die Aufgabe bekommen mit C++ von Internet seiten den HTML Code einzulesen. Das ganze als eine MFC Anwendung. Ich muss allerdings nur die verschiedenen Tags einlesen, wie z.B. <TITLE>, <b> und so weiter. Ich muss dann die ganzen verschiedenen Tags zählen und in einem List Control ausgeben.

    Jetzt wollte ich fragen ob mir jemand eine Funktion für das Tag einlesen und eine Funktion damit ich eine beliebige Seite eintragen kann von wo ich den Code einlese.

    Ich hab hier ein Bild wie es ungefähr aussehen sollte. Oben sollte natürlich ein Textfeld kommen wo ich die URL eintragen kann.

    http://img161.imageshack.us/img161/3424/bildva2.jpg


    Ich hoffe mir kann jemand helfen

    MfG
  • OK
    Wie du die Seite aus dem Netz bekommst muss dir jemand anderes sagen, nicht mein gebiet.

    Dann stellt sich die Frage ob du nur bekannte Tags lesen willst oder alle (Was uU nicht ganz einfach sein dürfte, da HTML4.0 mit abschließenden Tags nicht immer so streng ist).

    Vorgehen:
    • Datei in einen String einlesen (möglicherweise Teilweise)
    • mit std::string::find() nach dem beginn eines Tags suchen ( "<")
    • überprüfen ob es ein schließender Tag ist -> streichen / anders behandeln
    • Wenn du nur die häufigkeit zählen willst bietet sich wohl eine std::map<std::string, int> an, einfach den Eintrag mit dem Schlüssel des Tagnamens inkrementieren.
    • Wenn du Atribute / Inhalte brauchst wirds schwieriger:
      • atribute folgen ja mit leerzeichen auf den Tagnamen
      • für inhalte musst du den schließenden Tag finden (oben genannte Methode
      • Du brauchst wohl eine andere Datenstruktur, eine std::map mit std::string als Schlüssel dürfte weiterhin passen, für den Rest uU eine struct anlegen, z.B. mit einer std::list<std::string> für die inhalte und für jedes atribut, std::vector wenn du dem ersten Eintrag entsprechende Atribute und Inhalte zuordnen musst, den int zum zählen der Vorkomnisse nicht vergessen!

    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • wenn du die html-seite auf dem PC hast geht das einlesen z.B. Zeilenweise mit

    >>fgets()<<

    cppreference.com/stdio/gets.html in einen char[255]

    den kannst du dann einfach per zuweisung in einen string kopieren.

    =>Zeile auswerten, evtl. noch offene Tags merken

    (Ist hier wohl eine recht komplizierte Sache, ich hab für xml-ähnliche Datenstrukturen mit deutlich wenigher Tags als html einige 100 Codezeilen.
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • mach grad was ähnliches...

    hiermal nen Gedankenanstoß:

    Quellcode

    1. String remove_linefeeds(String victim)
    2. {
    3. String a = victim;
    4. while(a.Pos(char(0x0A))!=0)
    5. a.Delete(a.Pos(char(0x0A)),1);
    6. while(a.Pos(char(0x09))!=0)
    7. a.Delete(a.Pos(char(0x09)),1);
    8. return a;
    9. }
    10. //----------------------------------------------------------------------------
    11. TStringList* lister(String a)
    12. {
    13. String first = "<";
    14. String seconde = ">";
    15. TStringList* page = new TStringList;
    16. String Buffer = a;
    17. String newitem;
    18. while(a.Length() != 0)
    19. {
    20. Buffer = a;
    21. if(a.Pos(first)!= 0)
    22. {
    23. if(a.Pos(first) != 1) //Wenn vorne kein HTML-Tag
    24. {
    25. newitem = Buffer.Delete(Buffer.Pos(first),Buffer.Length());
    26. if(Trim(newitem) != "")
    27. page->Add(newitem); //ersten Teil hinzufügen
    28. a.Delete(1,a.Pos(first)-1); //erstenTeil entfernen
    29. }
    30. else //ab hier normal weiter
    31. {
    32. page->Add(Buffer.Delete(Buffer.Pos(seconde)+1,Buffer.Length())); //Tag hinzufügen
    33. a.Delete(1,a.Pos(seconde)); //hinzugefügten Tag entfernen
    34. }
    35. }
    36. else
    37. {
    38. page->Add(a);
    39. a="";
    40. }
    41. }
    42. return page;
    43. }
    Alles anzeigen