c++ internet



  • Ein gescheites Filtering gehört natürlich schon auch dazu. Links zu Bildern, in die aktuelle Seite rein usw. sind natürlich Unsinn, wenn man möglichst Breit suchen will.



  • Danke für die netten Antworten.
    Werde erstmal versuchen, eine x-beliebige Internetseite zu durchsuchen. Wenn das klappt, trau ich mich mit den Links ran

    Glaubt ihr es macht Sinn bzw. es ist nötig, vor der Programmierung eine kleine Dokumentation (Was das Projekt genau beinhaltet + Strukturam etc) zu schreiben?



  • Ich benutze libcurl und libxml2 (zum Parsen der HTML Seiten), beides C Bibliotheken (es gibt jeweils auch ein C++ binding), mit denen man an einem Wochenende einen kleinen Crawler hinbekommt. Man stellt aber schnell fest, dass der nicht weit kommt, denn im Internet herrscht absolutes Chaos 😃 An jeder Ecke lauert der nächste Depp, der deinem Html-Parser das Leben schwer macht.
    Wenn der dann endlich mal einigermaßen stabil ist, wirst Du feststellen, dass schon durch deine DSL Leitung mehrere tausend Webseiten pro Minute passen und dein mikriger RAM ratzfatz mit unbesuchten URLs voll ist. Du brauchst dann schnell gute Methoden den ganzen Kram möglichst fix woanders hinzuschreiben.
    Wenn dann alles toll läuft stellst du fest dass dein Crawler nen richtiger Depp ist und ständig im Kreis rennt oder hin und her oder sonst was. Darüber kannste dann deine Doktorarbeit schreiben, wie man sich möglichst intelligent durch ein Netz von Dokumenten bewegt. Da gibt es allerdings schon ein paar ganz nette Artikel.
    Alles in allem eine ganz lustige Sache, aber alles andere als einfach.



  • hanny_montanny schrieb:

    Danke für die netten Antworten.
    Werde erstmal versuchen, eine x-beliebige Internetseite zu durchsuchen. Wenn das klappt, trau ich mich mit den Links ran

    Glaubt ihr es macht Sinn bzw. es ist nötig, vor der Programmierung eine kleine Dokumentation (Was das Projekt genau beinhaltet + Strukturam etc) zu schreiben?

    Es macht Sinn sich vorher zu überlegen, was man denn alles realisieren möchte. Du kannst dabei so vorgehen, dass du deine Ideen in 3 Kategorien einteilst:

    • must-have (muss es haben)
    • should-have (sollte es haben)
    • nice-to-have (wäre schon zu haben)

    So kannst du schon mal grob sehen, wohin die "Reise" später gehen soll. Das ist für die Planung nicht ganz unwichtig, da du so weißt, was du evtl. für spätere Änderungen besonders flexibel programmieren solltest. Beim gesamten Projekt solltest du dir durchaus kleine (Zwischen-)Ziele setzen. So kannst du dich auch langfristig motivieren, wenn du immer wieder einen Erfolg hast.

    Ich selber würde keine umfangreichen Diagramme erstellen, sondern möglichst detailiert aufschreiben, was das Programm machen soll.

    Eine Dokumentation kannst du im Quellcode durch Kommentare vornehmen. Wenn das Programm mal größer ist und du es veröffentlichen willst, dann kannst du natürlich eine umfassendere Dokumentation schreiben.

    brotbernd schrieb:

    Ich benutze libcurl und libxml2 (zum Parsen der HTML Seiten), beides C Bibliotheken (es gibt jeweils auch ein C++ binding), mit denen man an einem Wochenende einen kleinen Crawler hinbekommt. Man stellt aber schnell fest, dass der nicht weit kommt, denn im Internet herrscht absolutes Chaos 😃 An jeder Ecke lauert der nächste Depp, der deinem Html-Parser das Leben schwer macht.
    Wenn der dann endlich mal einigermaßen stabil ist, wirst Du feststellen, dass schon durch deine DSL Leitung mehrere tausend Webseiten pro Minute passen und dein mikriger RAM ratzfatz mit unbesuchten URLs voll ist. Du brauchst dann schnell gute Methoden den ganzen Kram möglichst fix woanders hinzuschreiben.
    Wenn dann alles toll läuft stellst du fest dass dein Crawler nen richtiger Depp ist und ständig im Kreis rennt oder hin und her oder sonst was. Darüber kannste dann deine Doktorarbeit schreiben, wie man sich möglichst intelligent durch ein Netz von Dokumenten bewegt. Da gibt es allerdings schon ein paar ganz nette Artikel.
    Alles in allem eine ganz lustige Sache, aber alles andere als einfach.

    Auch ich rate zu libcurl, insofern gute Entscheidung. Allerdings würde ich mir gar kein HTML-Parser an Bord holen. Wozu? Letzendlich ist man nur an den Links interessiert. Entsprechend würde ich mir ein Parser basteln, der aus einem String Links erkennt. Dabei ist dann egal, ob diese mit einem <a href="mypage">Blub</a> eingebudnen wurden oder einfach www.c-plusplus.net dort steht.

    Natürlich ist das durchaus ein großer Aufwand, sowas zu programmieren und man muss auch viel testen. Aber schlussendlich hat man damit etwas, was viel flexibler, weniger fehleranfällig und gründlicher arbeitet.

    Will man das ganze möglichst schnell erledigen, so wird man später bei Threads landen. Ich hatte das damals auch so gelöst, da es einfach viel schneller ist - kann für die erste Version aber vernachlässig werden. Es soll ja erstmal laufen.



  • Dabei ist dann egal, ob diese mit einem <a href="mypage">Blub</a> eingebudnen wurden oder einfach www.c-plusplus.net dort steht.

    Ob das so ist, gehört zu der genannten Entscheidung zu den Anforderungen. In meinem Projekt ist es ein gewaltiger Unterschied ob ein URL in einem anchor, img, link, stylesheet, canonical oder einfach im Text steht.



  • @Dokumentation:
    Weiß nicht aber mir bringt das sogar Spaß ein Projekt zu dokumentieren und das richtig schön auszuarbeiten, selbst wenn das Tool nur für mich ist 🙂
    Ich finde es macht Spaß sein Projekt wie ein "richtiges" Projekt zu behandeln.

    Gehts euch auch so oder ist das eine Macke von mir ? 😃



  • Ich habe das auch mit einem einfachem Matching gemacht, ob etwas ein Link ist und da eben Bilder usw. rausgeschmissen.
    Der ist dann im ersten Stadium tatsächlich auch im Kreis gerennt, aber ein wenig später (Filtering) wurde es dann besser. Ich habe auch ein paar Interessante Webseiten so gefunden. 🙂

    @x-wall
    Hmm. Kommt drauf an. Wenn ich etwas ausprobieren will, dass etwas umfangreicher ist (wie eben ein Crawler), dann interessiert mich hauptsächlich die Umsetzung und die Probleme, die man da so findet und wie man die so behebt. Dann verliere ich eigentlich das Interesse wieder, weil ich keine Lust habe etwas zu machen, was nichts neues generiert. Crawler gibts genug und wahrscheinlich auch genug gute, die man brauchen kann, wenn man will. Wozu also noch gross dran weiter machen? (mein Meinung, keine direkte Frage)
    Dann einen Dokumentation zu schreiben für etwas, was lediglich für dich gedacht ist und hauptsächlich zum lernen da ist finde ich persönlich Zeitverschwendung. Selbst wenn du das dokumentieren selbst auch lernen willst würde ich das mit einem richtigem Projekt machen, welches klare Ziele und einen weiteren Nutzen hat.

    Falls du aber Spass dran hast, dann lass dich davon nicht abhalten. 😉



  • drakon schrieb:

    Ich habe auch ein paar Interessante Webseiten so gefunden. 🙂

    Ich find auch immer interessant, wie wenig Schritte zwischen einer Seite wie whitehouse.gov und der ersten xxx-Seite liegen 😃



  • Angeblich ist ja jede Webseite mit jeder anderen in höchstens 6 Links verbunden...



  • brotbernd schrieb:

    drakon schrieb:

    Ich habe auch ein paar Interessante Webseiten so gefunden. 🙂

    Ich find auch immer interessant, wie wenig Schritte zwischen einer Seite wie whitehouse.gov und der ersten xxx-Seite liegen 😃

    Interessant war, dass ich vor allem auf PC spezifische Seiten gelandet bin (eine xxx Seite war da IIRC nie dabei.. zumindest habe ich nie eine gesehen).

    @Th69
    Jede mag ich stark bezweifeln, da es viele Seiten gibt, welche nicht wirklich verlinkt sind (welche man natürlich aus dem Grund auch kaum findet). Aber dass viele Seiten über max 6 Links erreichbar sind klingt einigermasen realistisch.


Anmelden zum Antworten