[REGEX] Parsen einer Webseite

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] Parsen einer Webseite

    Ich kämpfe mich jetzt schon seit Stunden mit meinem Kollegen
    rum und wir suchen ne Lösung eine HTML-Seite zu parsen.

    Hier der spezifische Inhalt aus der HTML:

    <span class="userIcon"><a href="/user/NakedLunch/" title="" class="
    ">NakedLunch</a></span>

    Der Nutzer heisst hier "NakedLunch". Natürlich kommen auf der Page noch mehrere Nutzer vor, die alle im gleichen Muster liegen und zu finden sein.

    preg_match_all("!{a.*?href=\"/user/([^\"]*)\"[^}]*}(.*?){/a}!",$content2,$ergebni
    sse2);

    hier mein bisheriger Code:

    $content2 = file_get_contents("http://www............/".$groups[$i]."/members/");
    preg_match_all("!<a.*?href=\"/user/([^\"]*)\"[^>]*>(.*?)</a>!",$content2,$ergebnisse2);
    //
    foreach ($ergebnisse2[1] as $link2)
    {
    // löscht Backslash nach dem Benutzernamen und gibt Benutzernamen aus
    $rest = substr($link2, 0, -1);
    echo $rest.'<br>';
    $mitglieder[] = $rest;
    }
    }

    Hier mit finden wir zwar alle User der Seite,aber es kann auch sein das so mehrere male der selbe User ausgegeben wird. Ich komme mit den regulären Ausdrücke einfach nicht klar in PHP. Könnt ihr mir bitte helfen. Wir haben schon in diversen Foren nachgefragt und rumgesucht und einfach keine Lösung gefunden.
    Bitte helft uns, Danke 1000 mal!!!!!!

    Unser REGEX ist auch aus nem Beispiel das einfach so zufällig gepasst hat

  • #2
    einfach auf deinen Array $ergebnisse2 vor dem foreach array_unique() anwenden
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Danke für die schnelle Antwort.Habe mal folgendes probiert:

      $content2 = file_get_contents("http://www........./group/".$groups[$i]."/members/");
      preg_match_all("!<a.*?href=\"/user/([^\"]*)\"[^>]*>(.*?)</a>!",$content2,$ergebnisse2);
      //
      $result = array_unique($ergebnisse2);
      foreach ($result[0] as $link2)
      {
      $rest = substr($link2, 0, -1);
      echo $rest.'<br>';
      }

      Aber das geht auch nit *wein* , das gibts doch nicht, ich dreh gleich durch..... hätte ich den wirklich richtig passenden REGEX müsste ich gar nicht filtern nach "Doppelten"

      ich spring gleich aussem Fenster.

      Kommentar


      • #4
        Original geschrieben von Endolino
        Aber das geht auch nit *wein* , das gibts doch nicht, ich dreh gleich durch..... hätte ich den wirklich richtig passenden REGEX müsste ich gar nicht filtern nach "Doppelten"
        dein post wäre sicherlich in "Projekthilfe" besser aufgehoben, sei es drumm.
        das mit dem "doppelt" habe ich nicht verstanden. wenn du einen stark vereinfachten html-quelltext und die sektionen (regeln), die du matchen möchtest, postest, würde ich dir helfen.

        Kommentar


        • #5
          <head>
          <title>Mitglieder der Gruppe its my noise </title>
          /head><body id="LastBody" class="red">...

          <li class="resourceListItem memberDisplay" id="user2303079Displayed">
          <ul title="M&auml;nnlich, 25, United States">
          <li class="uName"> <span class="userIcon"><a href="/user/unbeknowneth/" title="" class=" ">unbeknowneth</a></span> </li>
          <li class="uAvatar"> <a href="/user/unbeknowneth/"> <img src="http://............./01ea07bc865af17cf33d6baa7f2f2adc.jpg" alt="unbeknowneth" /> </a> </li>
          <li class="uInfo">
          <dl>
          <dd> M&auml;nnlich, 25, United States </dd>
          <dt class="uLastTrack"> Zuletzt gespielter Titel: </dt>
          <dd class="uLastTrack"> <a href="/music/Sublime+Frequencies/_/Ramadan+Radio" title="" class=" aslink ">Sublime Frequencies &ndash; Ramadan Radio</a> </dd>
          </dl>
          </li>
          <li class="uContextualInfo"> Anmeldedatum 5. Jun. 2005 </li>
          <!-- uContextualInfo -->
          </ul>
          </li>
          <li class="resourceListItem memberDisplay" id="user2356064Displayed">
          <ul title="M&auml;nnlich, 22, Canada">
          <li class="uName"> <span class="userIcon"><a href="/user/NakedLunch/" title="" class=" ">NakedLunch</a></span> </li>
          <li class="uAvatar"> <a href="/user/NakedLunch/"> <img src="http://............/avatar/b75801514894f84cb95cb8c7331d574d.jpg" alt="NakedLunch" /> </a> </li>
          <li class="uInfo">
          <dl>
          <dd> M&auml;nnlich, 22, Canada </dd>
          </dl>
          </li>
          <li class="uContextualInfo"> Anmeldedatum 5. Jun. 2005 </li>
          ..
          .
          .

          In jeder kostanten Zeile wie <li class="uAvatar"> <a href="/user/NakedLunch/"> <img..... habe ich nach dem <a href="/user/ den Namen stehen, also hier "NakedLunch"; anschliessend folgt der Link zum Userbild. Ich benötige jedoch nur den Usernamen.

          Also müsste ich zwischen "<li class="uAvatar"> <a href="/user/" - den Usernamen - "/"> <img src="http://..." den Usernamen rausschneiden.


          $user_name = "angelsson";
          // HTML Datei einlesen des Users
          $content = file_get_contents("http://www.lastfm.de/user/".$user_name."/");
          // Links der Groups aus der Variable $content über REGEX holen
          // In dieser Variable ist die komplette Seite gespeichert
          preg_match_all("!<a.*?href=\"/group/([^\"]*)\"[^>]*>(.*?)</a>!",$content,$ergebnisse);

          Mit diesem REGEX finde ich zwar alle Links in der der Username vorkommt, aber auch Links die nicht mehr hauptsächlich rein auf die USer bezogen sind, sondern ich finde auch die Links die die Forumübersicht in dieser Gruppe zu diesem User ausspuckt. Daher komme ich zu doppelten Ergebnissen. Ich fange als erstes den User aus der Mitgliederliste ab und dann bekomme ich noch die Links ausgewertet die in der Forenübersicht am rechten Rand stehen. Die jjucken mich aber gar nicht mehr.

          Könnte ich oben gezeigten HTML-Code so auswerten, kämen wirklich nur noch die Mitglieder der Gruppe raus.

          Hoffentlich kann mir jemand helfen. Bin heute schon wieder seit 2 Stunden dran. Danke.

          Kommentar

          Lädt...
          X