Загрузка изображения через веб-скребинг с помощью Perl-скрипта

Я новичок в Perl, пытающийся загрузить изображение постера фильма IMDB с помощью сценария Perl с помощью Mechanize Framework. Я не получаю атрибут 'id' для тегов 'td', чтобы найти конкретное место для изображения. Вот так выглядит HTML-код части страницы IMDB:

    <table id="title-overview-widget-layout" cellspacing="0" cellpadding="0" border="0">
      <tbody>
        <tr>
          <td id="img_primary" rowspan="2">
            <div class="image">
              <a href="/media/rm419297536/tt2338151?ref_=tt_ov_i">
                <img width="214" height="317" itemprop="image" src="http://ia.media-imdb.com/images/M/MV5BMTYzOTE2NjkxN15BMl5BanBnXkFtZTgwMDgzMTg0MzE@._V1_SY317_CR2,0,214,317_AL_.jpg" title="PK (2014) Poster" alt="PK (2014) Poster">
              </a>
            </div>
            <div class="pro-title-link text-center">
          </td>
          <td id="overview-top">
        </tr>
        <tr>
      </tbody>
    </table>

И вот скрипт perl, который я пытаюсь скачать:

    use strict;
    use warnings;
    use WWW::Mechanize;
    use HTML::TokeParser;

    #create a new instance of mechanize
    my $agent = WWW::Mechanize->new();
    #get the page we want.
    $agent->get("http://www.imdb.com/title/tt2338151/");

    #supply a reference to that page to TokeParser
    my $stream = HTML::TokeParser->new(\$agent->{content});
    my $c = 0;#to store the count of images and give the images names

    #loop through all the td's
    while (my $tag1 = $stream->get_tag("td")) {
        $tag1->[1]->{id} ||= 'none';
        my $asd = $tag1->[1]->{id};
        print "$asd\n"; #shows none for all of the td's
        if ($asd && $asd eq 'img_primary') {

            while(my $tag = $stream->get_tag("div"))
            {
              # $tag will contain this array => [$tag, $attr, $attrseq, $text]
              #get the class of the div tag from attr
              my $cls = $tag->[1]{class};
              #we're looking for div's with the class gallery-img2
                if($cls && $cls eq "image") {
                #get the content of the src tag
                    my $image = $stream->get_tag('img')->[1]{src};
                #create a new mechanize to download the image
                    my $imgDown = WWW::Mechanize->new();
                #give the image url and the local path to mechanize
                    $imgDown->get($image, ":content_file" => ".//image".$c.".jpg");
                #update the count
                    $c++;
                }
            }
          }
    }
    print "Total images scraped $c\n";

Любая помощь будет очень присваиваться.

1 ответ

Когда задействован JavaScript, лучше всего использовать настоящий браузер, чтобы посещать страницы и запрашивать их содержимое.

Вы можете сделать это с помощью Selenium:: Remote:: Driver.

Другие вопросы по тегам