[PHP] Webseite auslesen regex Problem

Dieses Thema im Forum "Webentwicklung" wurde erstellt von freakZ, 11. Oktober 2011 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. Oktober 2011
    Webseite auslesen regex Problem

    Hallo,

    versuche seit einiger Zeit aus einer Webseite auszulesen mit preg_macht den titel kann ich schonmal auslesen ) *happy bin*.

    Code:
     function gettitle()
     {
     if (preg_match('#<title>(.*)<\/title>#Uis', $this->site, $hit))
     return $hit[1];
     else
     return False;
     }
    
    
    Folgendes soll nun noch ausgelesen werden doch ich schaffs nicht ;(
    Überall wo ein * das ändert sich, und soll ausgelesen werden!
    Code:
     <th>Gewicht in kg</th>
     <td>9,50*</td>
     </tr>
     <tr>
     <th>Ziel-PLZ mit Zustellbezirk</th>
     <td>1100 (105)*</td>
    
    <td>Sendung in Zustellung</td>
     <td>
     <a onClick="anker();" class="msgpor pngbox" style=" display:inline-block; vertical-align:middle;" href="#" id="yt2"></a> </td>
     <td>1726*</td>
    
     <td>*15.09.2011 16:06:44</td>
    
     
  2. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    preg_match_all mit folgendem Suchmuster

    /<td>(.*)<\/td>/

    Code:
    Array
    (
     [0] => Array
     (
     [0] => <td>9,50*</td>
     [1] => <td>1100 (105)*</td>
     [2] => <td>Sendung in Zustellung</td>
     [3] => <td>1726*</td>
     [4] => <td>*15.09.2011 16:06:44</td>
     )
    
     [1] => Array
     (
     [0] => 9,50*
     [1] => 1100 (105)*
     [2] => Sendung in Zustellung
     [3] => 1726*
     [4] => *15.09.2011 16:06:44
     )
    
    )
     
  3. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    // sorry, war vielleicht ein wenig zu komplex und gefunden wurde auch nichts

    PHP:
    <? php

    $search 
    = <<<END_TEXT
    <th>Gewicht in kg</th>
        <td>9,50</td>
                    </tr>
                    <tr>
                        <th>Ziel-PLZ mit Zustellbezirk</th>
                        <td>1100  (105)</td>

    <td>Sendung in Zustellung</td>
                        <td>
                        <a onClick="anker();" class="msgpor pngbox" style=" display:inline-block; vertical-align:middle;" href="#" id="yt2"></a>                    </td>
                        <td>1726</td>

                        <td>15.09.2011 16:06:44</td>
    END_TEXT;

    $price  '\d+,\d+' ;
    $date   '\d+\.\d+\.\d{4}[ ]+\d+:\d+:\d+' ;

    $pattern  "~<td>( $price | $date |\d+\s+\(\d+\)|\d+)</td>~" ;

    preg_match_all ( $pattern $search $match );
    print_r ( $match );
    Code:
    Array
    (
     [0] => Array
     (
     [0] => <td>9,50</td>
     [1] => <td>1100 (105)</td>
     [2] => <td>1726</td>
     [3] => <td>15.09.2011 16:06:44</td>
     )
    
     [1] => Array
     (
     [0] => 9,50
     [1] => 1100 (105)
     [2] => 1726
     [3] => 15.09.2011 16:06:44
     )
    
    )
     
  4. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    Sorry jetzt bin ich noch verwirrter ..

    Ich hab mir die oben gepostete funktion geschrieben damit ich das einzeln aufrufen kann, versteh nur bahnhof .. hab das teil am server von dir und der gibt mir das aus was du in der box hast. Kopier ich das und fügs als preg_match ein so ergibt es nichts, und wird nix angezeigt.
     
  5. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    sorry, war vielleicht ein wenig zu komplex. habs angepasst und entsprechend vereinfacht.
     
  6. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    Danke so jetzt hab ich nurn prob wie genau muss ich das integrieren - wenn ich nur das eingeb wie DerEntscheider meinte nach dem Muster:

    function getinfo()
    {
    if (preg_match_all('/<td>(.*)<\/td>/', $this->site, $hit))

    Dann sagt er mir nur array ;((
    Sorry das ichs nicht sofort raffe is hald neuland für mich ;((
     
  7. 11. Oktober 2011
    AW: Webseite auslesen regex Problem

    Das sollte doch klappen?

    Die einzelnen Werte kannst du dann über den Array auslesen, zB $hit[1][1] eben
     
  8. 12. Oktober 2011
    AW: Webseite auslesen regex Problem

    Sorry ich glaube wir reden aneinander total vorbei

    Meine funktion MUSS beibehalten werden - da ich diese standarisiert habe.
    Meine funktion:
    // Titelabfrage
    function gettitle()
    {
    if (preg_match('#HIER KOMMT REGEX REIN#', $this->site, $hit))
    return $hit[1];
    else
    return False;
    }

    Die Beispiel URL ist: Sendungsverfolgung

    Was geparsd werden soll:
    Gewicht in kg (dort jedoch nur die kg angabe) -> kg ändern sich immer
    Zustell PLZ (dort die 1120 (105) -> plz ändert sich immer
    Sendung in Zustellung -> (dort nur das Datum) -> ändert sich auch immer

    Und nein ich möchte keinerlei php code oder irgendwelche komplizierungen - ich möchte mittels simplen regex diese werte erfassen und in mein script (function) integrieren.
     
  9. 12. Oktober 2011
    AW: Webseite auslesen regex Problem

    PHP:
    function  gettitle ()
    {
    if (
    preg_match ( '#HIER KOMMT REGEX REIN#' $this -> site $hit ))
    return 
    $hit [ 1 ];
    else
    return 
    False ;
    }

    $output   gettitle ();

    echo 
    $output [ 1 ];  // 3,4,5 ..


    Wo liegt genau der Fehler?
    Die unbenötigten Daten filtern mit Regex hat keinen Sinn .. einfach nicht benutzen und dann stören die keinen.
     
  10. 12. Oktober 2011
    AW: Webseite auslesen regex Problem

    ich versteh nur eins nicht warum schreibt niemand einen regex "satz" der bei #Hier kommt regex rein# hinkommt.

    hab einige beispiele hier vor mir wie z.b alter aus einer nickpage auslesen und so und dort komischerweise gehts beispiel:
    function getAlter()
    {
    if (preg_match('/([\d]{1,2}) Jahre alt/', $this->site, $hit))
    return

    Ausgabe mit: print "Alter: ".$parser->getAlter()."\n";

    Mir gehts darum jeder schreibt mir da was vor aber keiner sagt warum meine function so wie sie ist nicht verwendet werden kann - das PROBLEM DAS ICH HABE ist, das ich NICHT WEISS wie genau ich an diese Daten kommen wie kg und so.

    Sorry das ich euch hier nerve nur ich versteh es atm nicht ;((
     
  11. 13. Oktober 2011
    AW: Webseite auslesen regex Problem

    Vielleicht hilft dir auch einfach folgende Klasse - Dann musst du dich nicht mit REGEX rumschlagen:
    http://www.jonasjohn.de/lab/htmlsql.htm
    (Kommt doch nicht in Frage)

    Aber um deine Frage zu beantworten:
    PHP:
    Regex Gewicht '|<th>Gewicht in kg</th>[^<]*<td>([\d]+,[\d]+)</td>|'
    Regex PLZ '|Zustellbezirk</th>[^<]*<td>([\d]{4}) |'
    Regex Datum Keine Ahnung welches Datum du meinst Auf deiner Beispielseite gibts ganz viele Daten und  "Sendung in Zustellung"  gibts nicht  ( weils eben schon ausgeliefert wurde ).
     
  12. 13. Oktober 2011
    AW: Webseite auslesen regex Problem

    danke werde ich testen neben dem Sendung in Zustellung (Status ist auch online wenn schon ausgeliefert wurde - da man den tracking von anfang an hat).
    Mir gehts um das Datum neben Sendung in Zustellung das wär das wichtigste.

    In diesem Fall Sendung in Zustellung 1726 12.10.2011 06:26:11
    Da Bräuchte ich das Datum

    thanks

    Edit: Grade getestet also folgendes funktioniert nun
    - PLZ

    Ausgabe:
    Seiten title: Sendungsverfolgung Gewicht: Array PLZ: 1120
     
  13. 13. Oktober 2011
    AW: Webseite auslesen regex Problem

    Naja du musst deine Funktion schon $match[1] zurückgeben lassen.... Sonst kommt natürlich bloß "Array" raus.

    Regex fürs Datum:
    PHP:
    '|<td>Sendung in Zustellung</td>.*(\d{2}\.\d{2}\.\d{4}\ \d{2}:\d{2}:\d{2})</td>|s'
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.