如何使用Web :: Scraper获取数据属性的值?

Joe*_*hew 2 perl

我已经能够使用简单的HTML结构从网站上抓取数据,并使用Perl模块Web :: Scraper从各种标签中检索数据.但是,我遇到了一个data-我无法以通常的方式处理的属性.

标签是:

<img class="slide_image"
     src="https://image.slidesharecdn.com/computerassistedsurgery-160629113952/95/computer-assisted-surgery-1-638.jpg?cb=1467200461" 
     data-small="https://image.slidesharecdn.com/computerassistedsurgery-160629113952/85/computer-assisted-surgery-1-320.jpg?cb=1467200461" 
     data-normal="https://image.slidesharecdn.com/computerassistedsurgery-160629113952/95/computer-assisted-surgery-1-638.jpg?cb=1467200461" 
     data-full="https://image.slidesharecdn.com/computerassistedsurgery-160629113952/95/computer-assisted-surgery-1-1024.jpg?cb=1467200461" 
     alt="COMPUTER ASSISTED SURGERY Something ">
Run Code Online (Sandbox Code Playgroud)

我需要的部分是"https://image.slidesharecdn.com/computerassistedsurgery-160629113952/95/computer-assisted-surgery-1-1024.jpg?cb=1467200461"在属性之后data-full.我目前的代码是:

use strict;
use warnings;

use lib "lib";

use URI;
use Web::Scraper;
use YAML;
use WWW::Mechanize;
use URI::Encode;
use HTTP::Cookies;
use LWP::UserAgent;
use Data::Dumper;

my $purlToScrape='https://www.slideshare.net/drdeepashivnani/computer-assisted-surgery?from_m_app=android';

print "Scraping $purlToScrape\n";

my $noticescr = scraper {
  process 'section>img', 'link[]' => 'TEXT'; 
};

my $notices = $noticescr->scrape(URI->new($purlToScrape));

print Dumper($notices);
Run Code Online (Sandbox Code Playgroud)

这失败并出现错误:

不知道如何处理0 => undef at /usr/local/share/perl/5.20.2/Web/Scraper.pm第150行.

我怎样才能解决这个问题?

Thi*_*Not 7

TEXT用于获取元素内的文本.使用@attr获取属性的值:

use strict;
use warnings 'all';
use 5.010;

use Web::Scraper;

my $scraper = scraper {
    process 'img', 'links[]' => '@data-foo';
};

my $result = $scraper->scrape('<img data-foo="foo" data-bar="bar">');
say for @{ $result->{links} };
Run Code Online (Sandbox Code Playgroud)

输出:

foo
Run Code Online (Sandbox Code Playgroud)

  • @Borodin即使没有严格,这是一个语法错误,所以我认为他们复制粘贴错了. (2认同)