Я очищаю Amazon с помощью Perl, но изображения не захватываются, у меня есть правильные параметры? - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь очистить продукты от Amazon (точнее, туфли), например, отсюда: http://www.amazon.com/DC-Mens-Skate-Black-Plaid/dp/B005BWAQVU/ref=sr_1_1?ie=UTF8&qid=1333376200&sr=8-1

По некоторым причинам изображения больше не сохраняются и не загружаются.Боюсь, у меня могут быть неверные параметры для изображений.

Вот выдержка из моего кода, в котором эта часть имеет место:

sub get_data
{
    my($product_content,$gender,$product_category,$prod_tag,$sub_category)=@_;
    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, так что, если это что-то очевидно, простите меня.

Ответы [ 3 ]

5 голосов
/ 02 апреля 2012

Зачем вам чистить их сайт, когда Amazon предоставляет API для получения информации о своих продуктах?

1 голос
/ 03 января 2013

Используйте Firefox и установите надстройку «Отключить HTTP referer при запуске». Затем перезапустите Firefox и попробуйте снова. Вы получите изображения.

1 голос
/ 02 апреля 2012

Для этого следует использовать модуль WWW::Scripter. Сегодня утром была выпущена новая версия этого модуля, и одна из очень новых функций этой новой версии - выборка изображений . Модуль будет извлекать изображения с надлежащим реферером и файлами cookie (если применимо), поэтому у вас не должно возникнуть проблем с захватом изображений ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...