2017-03-16 44 views
2

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

的标签是:

<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 "> 

我需要的部分是"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); 

这失败,出现错误:

Don't know what to do with 0 => undef at /usr/local/share/perl/5.20.2/Web/Scraper.pm line 150.

我该如何解决这个问题?

+1

这些都是属性,而不是标签。 – simbabque

+0

对。原谅错字。 – Droidzone

+0

你加载了很多你不需要的东西。 – simbabque

回答

6

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

输出:

foo 
+1

还需要''链接[]'在里面引号。我认为这个OP只在他发布的版本中加了'strict',因为它没有编译。 – Borodin

+2

@Borodin即使没有严格,这是一个语法错误,所以我认为他们复制粘贴错误。 – ThisSuitIsBlackNot