我已经能够使用简单的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行.
我怎样才能解决这个问题?
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)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |