Alle Links einer Seite auslesen (+ spezifizierung)

  • N'abend,

    Habe schon wieder eine Frage, langsam wird es peinlich - so oft. :oops:

    Also, ich möchte gerne alle Links einer Seite auslesen:
    Beispiel die Seite eines Freundes:

    Link:
    http://softnation.de

    Da soll mir dann unter anderem folgendes angezeigt werden:

    Zitat

    ?p=12&aid=62
    ?p=30&id=4
    ?p=12&aid=62
    ?p=30&id=4
    ...

    und so weiter...
    Eben alle Links zwischen: <a href=" und dem darauf folgenden "
    Also beispiel:

    HTML
    <a href="http://google.de" target="_blank">


    Daraus möchte ich dann:
    http://google.de genommen haben, und das eben mit jedem Link der Webseite.

    Gegooglet habe ich danach schon eine längere Zeit, jedoch nie etwas brauchbares gefunden.

    Ich weis das es so etwa in der Richtung klappen könnte:

    PHP
    preg_match_all("!<a.*?href=\'([^\']*)\'[^>]*>(.*?)</a>!",$content,$ergebnisse);


    Jedoch habe ich davon keine Ahnung, auch von den ganzen Zeichen - ich kann zwar PHP aber soweit ging mein Horizont bis jetzt noch nicht.
    Dazu kann ich aber sagen: Ich habe versucht mir die Zeichen anzueignen und mir alles mal durchzulesen zu den Zeichen aber ich habe es nicht verstanden...

    Ich hoffe mir kann jemand bei dem Problem helfen.
    Ich kann ja schonmal zeigen wie weit ich in etwa gekommen bin:

    Er zeigt mir dann aber einfach nur: Array Array Array an.
    Also, er soll mir alle Links ausgeben, untereinander.

    Zweiter Teil - Spezifizierung:

    Wie kann ich zum ersten Teil, wenn er alle Links ausgibt, zum Beispiel nur die Links ausgeben die mit:

    Zitat

    anfangen?

    Beispiel:

    HTML
    <a href="http://google.de/texttexttext">


    Gibt er nicht aus.

    HTML
    <a href="http://youtube.com/nochweitererLink">


    Gibt er aus!


    Wie kann ich das realisieren?
    Also ich habe wirklich schon versucht euch nicht wieder "belästigen" zu müssen, jedoch habe ich noch nichts passendes gefunden :(

    Dankeschön...

  • Ja es sind Arrays!
    Gib sie mal mit print_r aus statt mit echo.
    Liegt an den ( ) im regulären Ausdrück. Für jeden Klammerausdruck ein Array-Element.
    Außerdem:
    Nach dem <a das .*? macht herzlich wenig Sinn, weil dadurch so gut wie alles akzeptiert wird. Mach es lieber so: [^<]*?

    Vielel liebe Grüße
    The User

  • Vielleicht hab ichs falsch verstanden aber ich habe es jetzt so:

    Und er gibt aus:

    Zitat

    Array ( ) Array ( ) Array ( )

    Was habe ich falsch gemacht? :?

    Gruß
    Verzweiflung

  • Dann kommt die Fehlermeldung:

    Zitat


    Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '~' in ..... on line 8

    Warning: Invalid argument supplied for foreach() in ..... on line 11

    Mh...

    Hilfe :lol:
    Aber vielen dank, dass du dich so spät noch um mich "kümmerst" :D

    Einmal editiert, zuletzt von Verzweiflung (29. Mai 2009 um 17:07)

  • Funktioniert perfekt! Juhu! :)

    Weist du auch wie ich den Problembereich 2 löse?

    Also zum Beispiel, dass nur Links ausgegeben werden, die mit:
    http://youtube.com (als Beispiel) anfangen?

    Gruß
    Verzweiflung :D

    PS:

    Aktuell sieht die Ausgabe in etwa so aus:

    Zitat

    Array ( [0] => Weiterlesen [1] => Weiterlesen [2] => Weiterlesen [3] => Weiterlesen [4] => Quelle [5] => Kommentare [6] => Quelle [7] => Apple gegen Psystar [8]

    Kann man es auch machen, dass die Ausgabe in etwa so aussieht?

    Gute Nacht ;)

    2 Mal editiert, zuletzt von Verzweiflung (29. Mai 2009 um 01:16)

  • Um dann youtube rauszufilten muss du in die innere foreach zb aus den Link ein youtube , suchen, und wenn youtube vorhanden ist ausgeben, kann ich dir erst machen wenn ich von der arbeit komme muss nun gehen ;) sry

  • @Pion:

    Dankeschön! Damit wird alles perfekt untereinander ausgegeben.
    Jetzt habe ich aber noch ein kleines Problemchen:
    Momentan gibt er so etwas aus (gekürzter Ausschnitt des Gesamten):

    [Blockierte Grafik: http://img15.myimg.de/ab1526f.png]

    A = er gibt die Links so aus, wie sie auf der Seite zu finden sind, also:

    HTML
    <a href="link.de">Linktext</a>

    B = er gibt die Linkurl's aus:

    HTML
    link.de

    Dadrunter wäre noch:

    C = er gibt die Linktexte nur aus:

    HTML
    Linktext

    Wie kann ich machen, dass er nur die Linkurl's ausgibt? Also nur die der Kategorie B?

    Und zum nächsten Teil, dass mit der Spezifizierung habe ich noch nicht so ganz verstanden, also ich müsste den Youtube Link mit in das Regexp packen:

    PHP
    ~<a[^>]*href="http://youtube.com(.*)".*>(.*)</a>~Uis

    Nur, wie zu erwarten funktioniert das nicht (er gibt nichts aus). Wie kann ich nun den Doppelpunkt, Slash und den Punkt so umschreiben, dass es passt?

    Dankeschön :oops:

  • Was bekomm ich dafür ?

  • Es hat sich doch noch eine Frage ergeben:

    Kann ich auch Suchen in einem Quelltext kombinieren?

    Zum Beispiel das hier:

    PHP
    preg_match_all("~source site: <strong>(.*)</strong>~Uis",$contentb,$ergebnisseb);

    Also nach dem Suchen, was zwischen
    "source site: <strong>" und "</strong" steht SOWIE mit dem alten? Also:
    gleichzeitig:


    PHP
    preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse);

    Sodass er die Datei nur einmal einlesen muss? Ich kann es auch 2x hintereinander machen, nur kostet das viel Zeit, bis das Script dann durchgelaufen ist und je nach Größe der zu Verarbeitenden Daten (3000+) kann das schon ne Weile dauern.

    Und eine weitere Frage:
    Wie kann ich das hier:

    PHP
    preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse);

    so verändern, dass er nur nach Links sucht die zwischen:

    HTML
    <a target='_blank' href='


    und:

    HTML
    '><strong>view tutorial</strong></a>


    steht?

    Also zum Beispiel nach so einem Link suchen ?

    HTML
    <a target='_blank' href='http://youtube.com'><strong>view tutorial</strong></a>

    Ich habe es schon mit:

    PHP
    preg_match_all('~<a target='_blank' href='(.*)'><strong>view tutorial</strong></a>~Uis',$content,$ergebnisse);


    probiert, jedoch funktionierte das nicht ganz.

    Nochmal danke für die Hilfe im Vorraus! :)

  • Also du willst die Url von einem Link , sieht der den immer gleich aus?

    Also der Urlname mit den strong text?

    Naja es wird bestimmt nicht zu langsam, wenn du file getr contents nur einmal ausführst


    BZW sagt mal dein Vorhaben genau vllt gibts ne besser Lösung

    mfg

    Einmal editiert, zuletzt von Pion (30. Mai 2009 um 10:14)

  • Ich will einmal den text, der hinter "source site:" steht, und einmal den code der sich hinter dem ersten Link "versteckt" der als Linktext hat "view tutorial".

    Und da der Link "view tutorial" öfters vorkommt, muss ich leider das mit source site: mit checken, weil source site immer die Seite angibt, die der erste Link enthält.

    z.B:

    source site: forum-hilfe.de

    Und dann:

    HTML
    <a target='_blank' href='forum-hilfe.de/link1'><strong>view tutorial</strong></a>
    HTML
    <a target='_blank' href='web.de.de/link2'><strong>view tutorial</strong></a>
    HTML
    <a target='_blank' href='google.de/link3'><strong>view tutorial</strong></a>

    Und ich will davon nur den ersten Link, da ich nicht wusste wie das geht weil meine Methode nicht funktioniert hat, habe ich erst das auslesen lassen, was nach source site: kommt um danach den Link zu filtern. Wenn ich weis wie ich mache, dass er einfach mir den ersten Link gibt, der so aussieht:

    HTML
    <a target='_blank' href='http://youtube.com'><strong>view tutorial</strong></a>

    Wie kann ich das realisieren?

  • Du willst quasi immer die Url haben von dem Link wo <strong>view tutorial</strong> drinsteht ?

    Wenn ja ist das einfach

  • Ja, also:

    Bei dem Link hier:

    HTML
    <a target='_blank' href='web.de/link2'><strong>view tutorial</strong></a>

    Da will ich immer den link: http://web.de/link2
    Der ist eben dynamisch. Wichtig dabei: Es soll NUR der erste Link der so aussieht rausgeholt werden, weil es diese Formation mehrmals gibt...
    Also nur der erste von der Seite, wenn das Ding gefunden ist: Fertig.

    :D

  • Ja ich verstehe ich kanns dr auch machen aber wo soll das gehen?

    Auf seiner Seite gibts solche Links nicht, zeig mir mal ne Seite wo das so ist


    mfg

  • Hier wär das so.

    Da steht folgender Text

    Zitat

    Learn how to create a sleek portfolio layout using a gorgeous damask texture.
    submitted on: May 28, 2009
    source site: grafpedia.com
    view tutorial | practice tutorial

    Und da von diesem "view tutorial" (ist auf der Seite ein Link), will ich die URL haben, das ist das erste mal das der Linktext "view tutorial" auf der Seite auftaucht, also immer die URL von dem ersten mal "view tutorial".

    :)

    Einmal editiert, zuletzt von Verzweiflung (30. Mai 2009 um 15:03)

  • Uff das ging schwer, also folgendes muss dir klar sein, dies geht nun aber auch nur auf dieser Seite , wozu brauchst du das überhaupt