perl - 使用 curl 解析 XML,获取图像的 URL 并下载它

标签 perl curl shell download

我想编写一个 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/

相关文章:

android - 为什么 gradle 不运行我的 shell 脚本?

perl - 如何从 Spreadsheet::ParseExcel 数据创建哈希的哈希?

regex - 可变长度字符串中数字的 Grep 正则表达式

linux - 在制表符分隔的数据中查找所有可能的特征组合(列)

php - 用于在 PHP 中跟踪货件的 USPS API

https服务器上的git客户端和浏览器分离

php curl 多个cookie

python - 通过 Python 子进程模块在 shell 中进行管道传输

perl - 将 perl 脚本的调试跟踪重定向到文件

python - python中的文本重新样式化