2012-04-02 4 views
-4

Ich versuche, Produkte von Amazon (Schuhe um genau zu sein) wie von hier zu kratzen: http://www.amazon.com/DC-Mens-Skate-Black-Plaid/dp/B005BWAQVU/ref=sr_1_1?ie=UTF8&qid=1333376200&sr=8-1Ich kratze Amazon mit Perl, aber die Bilder werden nicht erfasst, habe ich die richtigen Parameter?

Aus irgendeinem Grund die Bilder nicht mehr speichern und herunterladen. Ich habe Angst, dass ich falsche Parameter für die Bilder habe. Hier

ist der Auszug aus meinem Code, in dem der Teil stattfindet:

sub get_data 
{ 
    my($product_content,$gender,$product_category,$prod_tag,$sub_category)[email protected]_; 
    my($product_name,$product_code,$brand,$product_price,$image_file,$image_name,$prod_size,$size_name,$color_name,$prod_color); 
    if($product_content=~m/<div\s*id\=\"atfResults\"[^>]*>([\w\W]+?)<div\s*id\=\"centerBelowStatic\">/is) 
    { 
     my $block=$1; 
     while($block=~m/<div\s*class\=\"image\">\s*<a[^>]*?href\=\"([^>]+?)\"[^>]*>\s*<img[^>]*>/igs) 
     { 
      my $source_url=$1; 
      $source_url=URI::URL->new_abs($source_url,$home_url); 
      my $final_content=&get_cont($source_url,$home_url,'GET'); 
      if($final_content=~m/<h1[^>]*>\s*<[^>]*>\s*([^>]+?)\s*</is) 
      { 
       $product_name=decode_entities($1); 
       print "\n\n$count :: Product Name :: $product_name\n"; 
       $product_name=~s/\'/\'\'/igs; 
      } 
      if($source_url=~m/\/dp\/([^>]+?)\//is) 
      { 
       $product_code=$1; 
       $product_code=~s/\'/\'\'/igs; 
      } 
      if($final_content=~m/<span\s*class\=\"brandLink\">\s*<[^>]*>\s*([^>]+?)\s*</is) 
      { 
       $brand=decode_entities($1); 
       print "Product Brand :: $brand\n"; 
       $brand=~s/\'/\'\'/igs; 
      } 
      if($final_content=~m/<td\s*class\=\"priceBlockLabelPrice\">\s*Price\s*\:\s*<[^>]*>\s*<[^>]*>\s*<[^>]*>\s*([^>]+?)\s*</is) 
      { 
       $product_price=$1; 
       $product_price=~s/\'/\'\'/igs; 
      } 
      if($final_content=~m/<script[^>]*>\s*var\s*colorImages\s*\=\s*\{([\w\W]+?)\]\};/is) 
      { 
       my $color_block=$1; 
       my $col=1; 
       $image_file=""; 
       $image_name=""; 
       while($color_block=~m/\"large\"\:\[\"([^>]+?)\"/igs) 
       { 
        my $img_src=$1; 
        if($img_src=~m/(?:.+\/)([^>]*?\.[a-z]+)/is) 
        { 
         my $img_fname=$1; 
         getstore($img_src,"Images/$img_fname"); 
         $img_fname=$dir."/Images/$img_fname"; 
         $image_name=$image_name."Product_Image_filename_".$col.","; 
         $img_fname=~s/\'/\'\'/igs; 
         $image_file=$image_file."\'$img_fname\',"; 
         $col++; 
        } 
        undef($img_src); 
        last if($col>10); 
       } 
       undef($color_block); 
      } 

Alles andere scheint in Ordnung zu retten, aber die Bilder, nada. Ich bin auch nicht wirklich ein Perl-Experte, also wenn es etwas Offensichtliches ist, vergib mir.

+7

Ich bin sicher, dass sie schließlich Ihre IP vollständig blockieren und Ihr Problem für Sie lösen werden. – geoffspear

Antwort

1

Sie sollten WWW::Scripter Modul dafür verwenden. Heute Morgen wurde eine neue Version dieses Moduls veröffentlicht und eines der sehr neuen Features dieser neuen Version ist Bild holen. Das Modul wird holen Bilder mit richtigen referer und Cookies (falls zutreffen), so sollten Sie kein Problem Bilder zu erfassen haben ...

5

Warum würden Sie ihre Website kratzen, wenn Amazon einen API sieht halten, ihr Produkt bekommen Einzelheiten?

1

Verwenden Sie Firefox und installieren Sie ein Add-on "HTTP-Referer beim Start deaktivieren". Dann starte Firefox neu und versuche es erneut. Du wirst Bilder bekommen.

Verwandte Themen