2012-04-02 21 views
-4

我试图从亚马逊(鞋子是精确),如从这里刮产品:http://www.amazon.com/DC-Mens-Skate-Black-Plaid/dp/B005BWAQVU/ref=sr_1_1?ie=UTF8&qid=1333376200&sr=8-1我使用Perl来抓亚马逊,但图像没有被捕获,我有正确的参数吗?

由于某种原因,图像不再保存和下载。我担心图像的参数可能不正确。

这里是我的代码摘录其中一部分发生:

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); 
      } 

一切似乎保存很好,但图像,虚无缥缈。我也不是真正的Perl专家,所以如果这件事很明显,请原谅我。

+7

我确定他们最终会完全阻止您的IP并为您解决问题。 – geoffspear 2012-04-02 14:27:00

回答

1

您应该使用WWW::Scripter模块。今天早上这个模块的新版本已经发布,这个新版本的新功能之一是图像提取。该模块将获取与适当引用者和饼干图像(如适用),所以你应该没有问题,拍摄图像...

5

为什么你会刮自己的网站时,亚马逊获得他们的产品保持提供了一个API细节?

1

使用Firefox并在“启动时禁用HTTP引用者”上安装添加。然后重新启动Firefox并再试一次。你会得到图像。