fremde seite analysieren

Dieses Thema im Forum "Webentwicklung" wurde erstellt von sweet, 16. Oktober 2008 .

Schlagworte:
  1. 16. Oktober 2008
    hallo

    ich wollte eine fremde seite analysieren und bestimmte inhalte rauskopieren.

    das mache ich mit der klasse snoopy

    klappt auch. nur habe ich folgendes prob.
    es handelt sich zum beispiel um folgenden inhalt.
    das erfassen von titel studio genre ist kein prob.
    zum beispiel erfasse ich die genre folgendermaßen
    PHP:
    include  "Snoopy.class.php" ;
    $snoopy  = new  Snoopy ;
    $snoopy -> agent  "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ;
    $snoopy -> referer  "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" ;

    $snoopy -> cookies [ "CartInfo" ] =  "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ;
    $snoopy -> cookies [ "nh" ] =  "" ;
    $snoopy -> cookies [ "UID" ] =  "785618111" ;
    $snoopy -> cookies [ "IAmAnAdult" ] =  "yes" ;
    $snoopy -> cookies [ "psychicsearch" ] =  "on" ;
    $snoopy -> cookies [ "TabsSeen" ] =  16 ;

    $snoopy -> fetchtext ( 'http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806' );
    print (
    $snoopy -> results );

    // Position vom Wort Category finden
    $findMich    'Category' ;
    $pos  strpos ( $snoopy -> results $findMich );

    // Position vom Wort Starring finden
    $findMich2    'Starring' ;
    $pos2  strpos ( $snoopy -> results $findMich2 );

    // Differenz zwischen dem Wort Category und Starring herausfinden
    // da in diesem Teil die Genre Begriffe stehen
    $pos3  $pos2  $pos ;

    $genre  substr ( $snoopy -> results $pos $pos3 );
    echo 
    "<br>" ;
    echo 
    $genre ;
    aber wie filtere ich die namen der darsteller raus?
    ich kann zwar herausfinden, ab welchem zeichen die darstellernamen beginnen.
    jedoch weiß ich nicht wie ich das anstelle, dass das script weiß, ab wann keine darstellernamen angezeigt werden.

    denn nach den darstellernamen, die ja je nach film unterschiedlich lang sind, kommt die beschreibung des films, die wiederum auch unterschiedlich ist.
     
  2. 16. Oktober 2008
    AW: fremde seite analysieren

    Hi!

    Du solltest dir mal Reguläre Ausdrücke angucken, damit kannst du das ganz einfach machen.

    Hier ist die passende PHP-Funktion.
     
  3. 17. Oktober 2008
    AW: fremde seite analysieren

    danke

    habe den code nun so
    bekomme aber dann den fehler:
    Warning: preg_match() [function.preg-match]: Unknown modifier 'a' in /home/sweex/domains/sweex.ws/public_html/test/Snoopy-1.2.3/auslesen.php on line 22
    PHP:
    <?
    include 
    "Snoopy.class.php" ;
    $snoopy  = new  Snoopy ;
    $snoopy -> agent  "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ;
    $snoopy -> referer  "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" ;

    $snoopy -> cookies [ "CartInfo" ] =  "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ;
    $snoopy -> cookies [ "nh" ] =  "" ;
    $snoopy -> cookies [ "UID" ] =  "785618111" ;
    $snoopy -> cookies [ "IAmAnAdult" ] =  "yes" ;
    $snoopy -> cookies [ "psychicsearch" ] =  "on" ;
    $snoopy -> cookies [ "TabsSeen" ] =  16 ;

    $snoopy -> fetch ( 'http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806' );
    //print ($snoopy->results);

    if( preg_match ( '@<title>(.*)</title>@' , $snoopy -> results , $matches ))
      {
        
    $titel = $matches [ 1 ];
        echo 
    $titel ;
      }
    if(
    preg_match ( "/class='categorylink'>(.*)</a>/" , $snoopy -> results , $matches ))
      {
        
    $studio = $matches [ 1 ];
        echo 
    $studio ;
      }
     
  4. 17. Oktober 2008
    AW: fremde seite analysieren

    Hi!

    Du hast "/" als "begrenzer" für deinen Regulären Ausdruck. Das heißt wenn dieser in deinem RegEx vor kommt musst du ihn maskieren, da er sonst das Ende des RegEx darstellt.
    Um dir diese nervige arbeit zu ersparen gibt es eine nette Funktion namens "preg_quote", die maskiert dir automatisch alle Zeichen.
     
  5. 17. Oktober 2008
    AW: fremde seite analysieren

    danke so klappte es dann doch noch
    PHP:
    preg_match ( "~class='categorylink'>(.+)</a></h2>~" $snoopy -> results $matches2 )
    und wie ist es wenn ich folgedendes habe
    cat=123>text</a>
    cat=53>text</a>

    ich habe es so versucht
    PHP:
    preg_match ( '~cat="([0-9]+)">(.*)</a>~' $snoopy -> results $matches3
    und so
    PHP:
    preg_match ( '~(cat=")[0-9]+(">)(.*)(</a>)~' $snoopy -> results $matches3
    aber es wird wieder nichts angezeigt.
     
  6. 17. Oktober 2008
    AW: fremde seite analysieren

    Der Matcht:

    PHP:
    preg_match ( '~cat=(\d+)">(.*?)</a>~' $snoopy -> results $matches3 );
     
  7. 17. Oktober 2008
    AW: fremde seite analysieren

    das komische ist:
    PHP:
    $suchtext  'href="/browsecat.asp?style=ice&amp;cat=32">Gonzo</a>' ;
    if(
    preg_match ( '%(cat=)[0-9]+(">)(.*)(</a>)%' $suchtext $matches3 ))
    {
        
    print_r ( $matches3 );
    }
    das klappt.
    aber so wird nichts angezeigt. man muss hinzusagen, dass es mehrere ergebnisse gibt
    PHP:
    if( preg_match ( '%(cat=)[0-9]+(">)(.*)(</a>)%' $snoopy -> results $matches3 ))
    {
        
    print_r ( $matches3 );

    obwohl der inhalt der variable $suchtext einfach mal aus dem quelltext rausgenommen wurde
     
  8. 18. Oktober 2008
    AW: fremde seite analysieren

    ok habe nun so weit alles hinbekommen.

    nun steh ich vor einem anderen prob.
    ich wollte auf noch auf das große coverbild zugreifen.
    jedoch scheint cduniverse.com irgendein schutz eingebaut zu haben. statt dem cover bild wird dieses kleine bild angezeigt


    ist es möglich diesen schutz zu umgehen. ich täusche ja mit dem snoopy script schon einen broswer vor. aber trotzdem klappt es nicht
     
  9. 18. Oktober 2008
    AW: fremde seite analysieren

    Einen Referer von cduniverse.com absenden.
    Kann man mit cURL mit der curl_setopt Option "CURLOPT_REFERER" machen.
     
  10. 18. Oktober 2008
    AW: fremde seite analysieren

    wie schon im ersten posting sende ich referer broswerkennung etc alle nötigen cookies.
    ich kann auch auf die seite zugreifen. jedoch wird das bild durch diesen schutz nicht angezeigt.
    PHP:
    <?
    include 
    "Snoopy.class.php" ;
    $snoopy  = new  Snoopy ;
    $snoopy -> agent  "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ;
    $snoopy -> referer  "http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806" ;

    $snoopy -> cookies [ "CartInfo" ] =  "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ;
    $snoopy -> cookies [ "nh" ] =  "" ;
    $snoopy -> cookies [ "UID" ] =  "785618111" ;
    $snoopy -> cookies [ "IAmAnAdult" ] =  "yes" ;
    $snoopy -> cookies [ "psychicsearch" ] =  "on" ;
    $snoopy -> cookies [ "TabsSeen" ] =  16 ;
    $url1  'http://www.cduniverse.com/images.asp?pid=7317169&style=ice&image=front&title=European+♂️♀️+Stalkers+DVD' ;
    $snoopy -> fetch ( $url1 );
    print (
    $snoopy -> results );
    ?>
     
  11. 18. Oktober 2008
    AW: fremde seite analysieren

    Du musst einen Request auf das Bild absetzen mit dem Referer von cduniverse.
     
  12. 20. Oktober 2008
    AW: fremde seite analysieren

    das prob welches ich nun habe ist folgendes. ich öffne eine seite, ermittle einen link.
    nun wollte ich mit snoopy diesen link folgen und dort alle links anzeigen lassen
    vereinfacht.
    PHP:
    $snoopy -> fetch ( 'http://homepage.de' )
    print (
    $snoopy -> results );
    $snoopy -> fetchlinks ( 'http://homepage.de/unterseite.php' )
    print (
    $snoopy -> results );
    das zweite print ($snoopy->results); zeigt mir aber nicht die links an, sondern nochmals den seiteninhalt von der ersten seite.
    gibt es da eine lösung?
     
  13. 20. Oktober 2008
    AW: fremde seite analysieren

    Bastel dir einfach dein eigenes Script, was soll an "snoopy" denn so toll sein? Geht mit cURL sicher genauso wenn nicht viel leichter, was du da vorhast. Oo
     
  14. 20. Oktober 2008
    AW: fremde seite analysieren

    Aber ein Workaround. Ich kann deine Frage nicht beantworten weil ich keine Lust hab mich in das Snoopy Script einzuarbeiten.
     
  15. 20. Oktober 2008
    AW: fremde seite analysieren

    ok habe es mit curl hinbekommen.

    PHP:
    <?

    //Die Session initialisieren
    $ch  curl_init ( "http://www.cduniverse.com/productinfo.asp?pid=7457001&style=ice/" );
    curl_setopt ( $ch CURLOPT_REFERER "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" );
    curl_setopt ( $ch CURLOPT_COOKIE , 'CartInfo=786599197%2E10%2F16%2F2008+10%3A28%3A14+AM; nh=; UID=785618111; IAmAnAdult=yes; psychicsearch=on; TabsSeen=16' );
    curl_setopt  ( $ch CURLOPT_USERAGENT "Mozilla/4.0" );

    $fp  fopen ( "example_homepage.txt" "w" );

    //Session Optionen setzen
    curl_setopt ( $ch CURLOPT_FILE $fp );
    curl_setopt ( $ch CURLOPT_HEADER 0 );

    //Ausführen der Aktionen
    curl_exec ( $ch );

    //Session beenden
    curl_close ( $ch );
    fclose ( $fp );
    $content  file_get_contents ( './example_homepage.txt' );

    if(
    preg_match ( '~<title>(.*)</title>~' , $content , $matches ))
      {
        
    $titel = $matches [ 1 ];
        echo 
    $titel ;
      }
      

    if(
    preg_match ( "~class='categorylink'>(.+)</a></h2>~" $content $matches2 ))
    {
        
    $studio  $matches2 [ 1 ];
        echo 
    $studio ;
    }

    if(
    preg_match_all ( '~<a class="categorylink" href="\/browsecat.asp\?style=ice&amp;cat=(\d+)&amp;cart=(\d+)">(.*?)</a>~' $content $matches3 ) !=  false ) {
        foreach (
    $matches3 [ 3 ] as  $wert ) {
            echo 
    $wert ;
        }
    }
    if(
    preg_match_all ( '~HT_Search_Name=([A-Za-z]+)\+([A-Za-z]+)">(.*?)</a>~' $content $matches4 ) !=  false ) {    
        foreach (
    $matches4 [ 3 ] as  $wert ) {
            echo 
    $wert ;
        }
    }

    if(
    preg_match ( "~<tr><td><a rel=\"nofollow\" href=\"\/(.*?)\"><img src~" $content $matches5 ))
    {
        
    $bildurl  "http://www.cduniverse.com/" . $matches5 [ 1 ];
    }

    // ------------------------------------------------------------------
    // 2 Seite analysieren
    // ------------------------------------------------------------------
    //Die Session initialisieren
    $ch2  curl_init ( " $bildurl " );
    curl_setopt ( $ch2 CURLOPT_REFERER "http://www.cduniverse.com/productinfo.asp?pid=7457001&style=ice/" );
    curl_setopt ( $ch2 CURLOPT_COOKIE , 'CartInfo=786599197%2E10%2F16%2F2008+10%3A28%3A14+AM; nh=; UID=785618111; IAmAnAdult=yes; psychicsearch=on; TabsSeen=16' );
    curl_setopt  ( $ch2 CURLOPT_USERAGENT "Mozilla/4.0" );

    $fp2  fopen ( "example_homepage2.txt" "w" );

    //Session Optionen setzen
    curl_setopt ( $ch2 CURLOPT_FILE $fp2 );
    curl_setopt ( $ch2 CURLOPT_HEADER 0 );

    //Ausführen der Aktionen
    curl_exec ( $ch2 );

    //Session beenden
    curl_close ( $ch2 );
    fclose ( $fp2 );

    $content2  file_get_contents ( './example_homepage2.txt' );

    if(
    preg_match ( '~<center><p><img src=\"(.*?)\" border=0></center>~' , $content2 , $matches6 ))
      {
        
    $bild  $matches6 [ 1 ]);
        
    copy ( $bild , "temp,jpg" );  
        
    $dateiname2  "temp.jpg" ;
       
    $size = getimagesize ( $dateiname2 ); 
       
    $breite = $size [ 0 ]; 
       
    $hoehe = $size [ 1 ]; 
       
    $neueBreite = 250
       
    $neueHoehe = intval ( $hoehe * $neueBreite / $breite );
       
       
    $altesBild = ImageCreateFromJPEG ( $dateiname2 );
       
    $neuesBild = imagecreatetruecolor ( $neueBreite , $neueHoehe ); 
       
    ImageCopyResized ( $neuesBild , $altesBild , 0 , 0 , 0 , 0 , $neueBreite , $neueHoehe , $breite , $hoehe );
       
    ImageJPEG ( $neuesBild , $dateiname2 90 );
      }

    ?>
    habe aber nun eine andere frage.

    es gibt bestimmte darsteller die ich rausfiltern möchte. da dachte ich an in_array

    PHP:
    if( preg_match_all ( '~HT_Search_Name=([A-Za-z]+)\+([A-Za-z]+)">(.*?)</a>~' $content $matches4 ) !=  false ) {    
        
    $filter  = array (  'Kapri Styles' 'Alexis Silver' );
        foreach (
    $matches4 [ 3 ] as  $wert ) {
            if (!
    in_array ( $wert , $filter )) {
                
    $akzeptierteWoerter [] =  $wert ;
            }
        }
        
    print_r  ( $akzeptierteWoerter );
    }
    aber dann wird immer nur der letzte darsteller ins array akzeptierteWoerter aufgenommen.
     
  16. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.