我对perl非常陌生,我试图从网站上收集链接和图像。我目前正在阅读有关regular expressions的内容,到目前为止,我已设法获取包含链接或图片的html行(至少我相信如此)
/<img src|<a href/i #I'm just comparing every line of html to this
但是如何捕获和存储实际网址?基本上是这样的:
<img src="http://i1.nyt.com/images/2014/03/23/us/23marriage2/23marriage2-largeHorizontal375.jpg"
进入这个:
http://i1.nyt.com/images/2014/03/23/us/23marriage2/23marriage2-largeHorizontal375.jpg
答案 0 :(得分:1)
更现代的网络客户端和解析器之一是Mojo::UserAgent
和Mojo::DOM
。有一个8分钟的网络广播,可以很好地介绍他们的功能:MojoCast episode 5
为了从您请求的示例中提取所有链接和图像,只需要以下内容:
use strict;
use warnings;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $dom = $ua->get('http://www.nytimes.com')->res->dom;
# Print all href's
for my $href ($dom->find('a')->attr('href')->each) {
print "$href\n";
}
# Print all img src's
for my $img ($dom->find('img')->attr('src')->each) {
print "$img\n";
}
注意:这些模块包含在Mojolicious
答案 1 :(得分:0)
快速而肮脏:/(<img src|<a href)="([^"]*?)"/i
然后你应该使用第二个捕获组(第二组括号)。
答案 2 :(得分:0)
一般来说,我建议使用像HTML::TreeBuilder而非正则表达式来解析HTML。
说,你当然可以尝试使用正则表达式来获取你所追求的内容 - 但它非常依赖于你的源材料。通常会捕获img src或href的东西会有点像(例如,假设诸如双引号之类的东西总是被使用,并且比解析解决方案更脆弱):
/<img[^>]*?src="([^"]*)"|<a[^>]*?href="([^"]*)"/i
如果匹配,则图片网址将位于$1
中,或链接位于$2
。