我想编写一个 shell 脚本来从 rss 提要中获取图像。 现在我有:
curl http://foo.com/rss.xml | grep -E '<img src="http://www.foo.com/full/' | head -1 | sed -e 's/<img src="//' -e 's/" alt=""//' -e 's/width="400"//' -e 's/ height="400" \/>//' | sed 's/ //g'
我用它来抓取文件中第一次出现的图像 URL。 现在我想把这个 URL 放在一个变量中,以便再次使用 cURL 来下载图像。 任何帮助表示赞赏! (此外,您还可以就如何更好地从带有 URL 的行中删除所有内容提供提示。这是行:
<img src="http://www.nichtlustig.de/comics/full/100802.jpg" alt="" width="400" height="400" />
可能有一些比我的解决方案更好的正则表达式来删除除 URL 之外的所有内容。) 提前致谢!
最佳答案
使用正则表达式解析 HTML/XML 是一个 Bad Idea in general .因此,我建议您使用合适的解析器。
如果您不反对使用 Perl,让 Perl 使用适当的解析器库为您做正确的 XML 或 HTML 解析:
HTML
curl http://BOGUS.com |& perl -e '{use HTML::TokeParser;
$parser = HTML::TokeParser->new(\*STDIN);
$img = $parser->get_tag('img') ;
print "$img->[1]->{src}\n";
}'
/content02/groups/intranetcommon/documents/image/blk_logo.gif
XML
curl http://BOGUS.com/whdata0.xml | perl -e '{use XML::Twig;
$twig=XML::Twig->new(twig_handlers =>{img => sub {
print $_[1]->att("src")."\n"; exit 0;}});
open(my $fh, "-");
$twig->parse($fh);
}'
/content02/groups/intranetcommon/documents/image/blk_logo.gif
关于perl - 使用 curl 解析 XML,获取图像的 URL 并下载它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391362/