Daten aus Website auslesen - file_get_contents?

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

  • Daten aus Website auslesen - file_get_contents?

    Hi,

    ich hab eine Seite mit etlichen Links, die ich automatisiert auslesen und in einer mySQL Tabelle speichern will.

    PHP-Code:
    <?php

        $sql 
    = @mysql_connect("localhost""root""");
        if(
    $sql == false) {
        echo 
    "Keine Verbindung zum SQL-Server";
        exit();
        }

        
    $url "http://www.linkseite.de";
        
        
    $html file_get_contents($url);

        
    $startstring "<td><a href=\"";
        
    $endstring "\"  title=\"zur Detailansicht";

        echo 
    $html;

    ?>
    Sind 20 Links aus der Seite, jeweils innerhalb von start und endstring. Leider komm ich nicht mehr drauf, wie ich mir genau den Inhalt dazwischen abgreifen kann. Regex wird mittlerweile ja für sowas genutzt, damit komm ich jedoch nicht klar. Daher wollt ich's anders machen.
    Jetzt hab ich in $html den gesamten Code der Seite als String. Jetzt müßte eine for each Schleife folgen, aber wie greife ich in dieser auf die Links zwischen den beiden Filterstrings zu?

  • #2
    PHP: strpos - Manual
    PHP: substr - Manual

    Kommentar


    • #3
      PHP-Code:
      <?php
          $url 
      "http://www.linkseite.de";
          
          
      $html file_get_contents($url);

          
      $startstring "gsid";
          
      $endstring "de&amp;_bereich=A";

          
      $posstart strpos($html$startstring);
          
      $posend strpos($html$endstring);
          
      $laenge $posend $posstart;

          
      $link1 substr($html$posstart$laenge);      

          echo 
      $link1;
                     
      ?>
      Ok, denk soweit ist mir das Alles klar - das gibt mir jetzt schonmal was aus.

      Der Aufbau der Links der Seite:
      Code:
      <a href="[URL="http://www.php-resource.de/forum/view-source:http://www.statistik.brandenburg.de/sixcms/detail.php?template=lds_schulanzeige_d&_gsid=bb2.c.555357.de&_bereich=A"]/sixcms/detail.php?template=anzeige_d&amp;_gsid=bb2.c.555357.de&amp;_bereich=A[/URL]"  title="zur Detailansicht">
      Die Ausgabe:
      gsid=bb2.c.525368. - wodraus ich mir die zu sammelnden Links wieder zusammen setzen kann. Jetzt gibt's allerdings pro Seite 20 Links und nicht nur einen - eine for each Schleife wird benötigt?!
      Wie ungefähr muß ich da jetzt ran gehen?

      Kommentar


      • #4
        Hallo,

        dafür nimmst du eine while-Schleife und brichst sie erst ab, wenn $posstart oder $posend false ergeben.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          PHP-Code:
              $url "http://www.seite.de";
              
          $html file_get_contents($url);
              
          $startstring "gsid";
              
          $endstring "de&amp;_bereich=A";

              
          $posstart strpos($html$startstring);
              
          $posend strpos($html$endstring);
              
          $laenge $posend $posstart;
              
              
          $link1 substr($html$posstart$laenge)."\n"
              
          $dateiname "test.txt";
              
          $handler fOpen($dateiname "a+");
              
          fWrite($handler $link1);
              
          fClose($handler);
            
          ?> 
          so sieht mein Code jetzt aus, da cih jetzt erstmal nur alle Links
          sammle, und dann später aus denen den Content hole, hab ich mir gedacht, ist es besser diese erstmal einfach Zeile für Zeile in eine .txt zu schreiben - ist das so gut gelöst oder funktionierender unsinn?

          Jetzt zur Schleife:
          PHP-Code:
          while($posstart != false)
              {
          $link1 substr($html$posstart$laenge);      
          ...
          in Datei schreiben usw...

              } 
          So stimmen kann das noch nicht, oder? Hier wird jedenfalls nicht weiter gespeichert dann.

          Kommentar


          • #6
            Du musst natürlich innerhalb der Schleife entweder den Suchstring kürzen (sonst findet er ja immer dasselbe) oder aber den dritten Parameter von strpos benutzen und damit festlegen, ab wo gesucht werden soll.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis Beitrag anzeigen
              Du musst natürlich innerhalb der Schleife entweder den Suchstring kürzen (sonst findet er ja immer dasselbe) oder aber den dritten Parameter von strpos benutzen und damit festlegen, ab wo gesucht werden soll.
              Puh, kannst du mir da bitte ein klein wenig mehr zu sagen - so weiß ich nicht wirklich weiter. Nach dem ersten Durchlauf, hab ich start und end Position vom ersten Link, dann muß ab der Position weiter nach $startstring gesucht werden - von der Logik her richtig? Wenn ja wüßt ich aber dennoch nicht wie ich ansetzen sollte.

              Kommentar


              • #8
                Ich war sicher, dass die gegebenen Infos reichen würden. Wo liegt das Problem? Hast du mal im Handbuch nachgelesen, wofür der dritte Parameter gut ist?

                PHP-Code:
                    $posstart strpos($html$startstring$posend);
                    
                $posend strpos($html$endstring$posstart); 
                Mehr Code gibt's von mir aber nicht.
                Zuletzt geändert von AmicaNoctis; 16.03.2010, 15:55.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Zitat von AmicaNoctis Beitrag anzeigen
                  Ich war sicher, dass die gegebenen Infos reichen würden. Wo liegt das Problem? Hast du mal im Handbuch nachgelesen, wofür der dritte Parameter gut ist?

                  PHP-Code:
                      $posstart strpos($html$startstring$posend);
                      
                  $posend strpos($html$endstring$posstart); 
                  Mehr Code gibt's von mir aber nicht.
                  Merci
                  Klar hab ich's mir durch gelesen, will php lernen, nich ständig alles vorgekaut bekommen. Ich hatte's nur nicht ganz verstanden. Online in ein andres manual geguckt - passt.

                  An und für sich macht er jetzt ja was er soll, danke auf jeden Fall dafür.
                  Jetzt muß ich nur dafür sorgen, dass er das erste Ergebnis auch speichert, dass schaff ich alleine. Aber noch ein weiteres Problem:

                  <!DOCTYPE html PU

                  wird mir am Ende der Datei noch gespeichert.

                  PHP-Code:
                      $url "http://www.seite.de/";
                      
                  $html file_get_contents($url);
                     
                      
                  $startstring "gsid";
                      
                  $endstring "de&amp;_bereich=A";

                      
                  $posstart strpos($html$startstring);
                      
                  $posend strpos($html$endstring);
                      
                  $laenge $posend $posstart;

                   while(
                  $posstart != false)
                      {
                      
                      
                  $posstart strpos($html$startstring$posend);
                      
                  $posend strpos($html$endstring$posstart);

                      
                  $link1 substr($html$posstart$laenge)."\n";;  
                      
                  $zwischenpos $posend 1;

                      
                  $dateiname "test.txt";
                      
                  $handler fOpen($dateiname "a+");
                      
                  fWrite($handler $link1);
                      
                  fClose($handler);
                      }

                  ?> 

                  EDIT:
                  Ok, erster Hit wird auch gespeichert, klar das da nichts passiert, wenn ich die Speicherfunktion erst in der Schleife
                  habe, aber der erste Hit vorher gefunden wird.

                  Wie bekomm ich jetzt das "<!DOCTYPE html PU" weg?
                  Zuletzt geändert von OnkelBenS; 16.03.2010, 17:21.

                  Kommentar


                  • #10
                    string zerlegen - Probleme - doch regex?

                    Hey,

                    Bin gerad dabei Infos aus einer Website auszulesen. Dafür nutze ich
                    Start und Endpunkte und .

                    PHP-Code:
                    $startstringTE "Telefon<";
                    $endstringTE ">Fax";

                    $posstartTE strpos($html$startstringTE);
                    $posendTE strpos($html$endstringTE);

                    $laengeTE $posendTE $posstartTE -69;
                    $telefon substr($html$posstartTE 16$laengeTE);

                    echo 
                    "Telefon:".$telefon."<br><br>"
                    Während der Quelltext wie folgt aussieht:
                    HTML-Code:
                    <tr>
                            <th class="left">Telefon</th><td>(03210)1234567</td>
                          </tr>
                          <tr>
                            <th class="left">Fax</th><td>(03210) 1234567</td>
                          </tr>
                    Das klappt auch wunderbar, nur hab ich jetzt das Problem,
                    dass ich die Adresse in Anschrift, Postleitzahl und Ort zerlegen möchte.

                    HTML-Code:
                    <tr>
                            <th class="left">Adresse</th><td>Am Stadion 1<br />12345 wasauchimmer</td>
                          </tr>
                    Mit meiner bisherigen Lösung bekomm ich nur alles in einem. Wie zerlege ich
                    das am besten? Regex hab ich mir bereits angeguckt, kapier das aber leider nicht ganz.
                    Gibt's noch eine andere Möglichkeit bzw. kann mir wenn nicht jemand ein wneig unter die Arme
                    greifen was die regulären Ausdrücke angeht?

                    Kommentar


                    • #11
                      Hallo,

                      dachte mir schon, dass du mit strpos und substr nicht weiter kommst. Reguläre Ausdrücke sind anfangs etwas kompliziert, aber da muss man früher oder später sowieso durch und danach liebst du sie. Lies das Handbuch und ein paar Tutorials dazu. Das schaffst du schon.

                      Regenechsen ist vielleicht hilfreich für den Einstieg, aber das PHP Handbuch reicht auch und ist im Zweifelsfalle die zuverlässigere Referenz.

                      Gruß,

                      Amica
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        regex online tester - regular expressions
                        Slava
                        bituniverse.com

                        Kommentar


                        • #13
                          Danke schonmal für die Antworten, ich seh ein, dass ich mich mit regex
                          beschäftigen sollte, heute reicht die Zeit dafür aber leider nicht mehr.
                          Daher geh ich jetzt doch den Weg den ich bisher gegangen bin mit strpos.

                          Die gesamte Adresse kann ich ja mit strpos auslesen. Hab
                          dann $adresse="Am Staddel 1<br />16225 Eberswalde"

                          Jetzt kann ich in einem 2ten Schritt doch genau Alles ansprechen
                          Straße von Start bis "<"
                          Postleitzahl von ">" bis 5 Zeichen später (PLZ hat immer 5 Stellen)
                          Ort von ">"+6 Zeichen bis Ende.

                          Hab mir als ich gemerkt hab, dass es doch recht einfach geht ziemlich
                          kräftig gegen die Stirn geschlagen

                          EDIT:
                          Hab's jetzt fertig, läuft wunderbar!
                          Zuletzt geändert von OnkelBenS; 18.03.2010, 15:59.

                          Kommentar


                          • #14
                            Daten in MySQL DB speichern

                            So, mein PHP Script findet nun alle Daten auf der Seite die er durchsuchen soll, nun sollen diese allerdings noch gespeichert werden. Aber irgendwie hab ich das Bedenken, dass ich falsch an die Sache ran gehe.

                            Was mein Script macht:

                            $urlTeil="1";
                            $url="http://www.seite.de/detail.php?ID=" .$urlTeil. "de";
                            $html = file_get_contents($url);

                            und jetzt sucht er sich 14 Stellen via strpos und substr, speichert
                            diese in jeweils einer Variablen. Das Ganze kommt dann noch in eine Schleife,
                            da die 14 vars von insgesamt 880 Seiten gezogen werden müßen.

                            Bau ich jetzt nachdem Graben immer wieder eine Verbindung zum MySQL
                            Server auf (xampp hier local), und schick alles einzeln per Insert in die DB?

                            Kommentar


                            • #15
                              Hallo nochmal,

                              ich versteh deine Frage nicht.

                              Außerdem musst du nicht wegen jeder Anschlussfrage ein neues Thema aufmachen, wenn man ohne die Kenntnis der anderen Themen sowieso den Zusammenhang nicht versteht.

                              Daher *join*

                              Gruß,

                              Amica
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X