
Mojo::DOM(或任何其他框架)解析网页时,提取可能是相对或绝对的资源地址是相当常见的.有没有一种快捷方法可以将这样的资源地址转换为绝对URL? 以下mojo命令拉出mojolicio.us上的所有样式表:
$mojo get http://mojolicio.us "link[rel=stylesheet]" attr href/mojo/prettify/prettify-mojo-light.CSS/CSS/index.CSS
以下脚本也是如此,但也使用URI将资源转换为绝对URL.
use strict;use warnings;use Mojo::UserAgent;use URI;my $url = 'http://mojolicio.us';my $ua = Mojo::UserAgent->new;my $dom = $ua->get($url)->res->dom;for my $CSShref ($dom->find('link[rel=stylesheet]')->attr('href')->each) { my $CSSurl = URI->new($CSShref)->abs($url); print "$CSSurl\n";} 输出:
http://mojolicio.us/mojo/prettify/prettify-mojo-light.CSShttp://mojolicio.us/CSS/index.CSS
显然,使用加载DOM的URL,应该在此上下文中使用相对URL.但是,除了自己编写代码之外,我不知道获取资源绝对URL的方法.
MojolicIoUs有Mojo::URL #to_abs.但是,我不知道它是否会以某种方式与Mojo :: DOM集成,并且本身会占用比URI更多的代码.
我理想的解决方案是,如果脚本和命令行都可以使用以下内容,但是要查找使用Mojo进行解析的任何相关见解:
mojo get http://mojolicio.us "link[rel=stylesheet]" attr href to_abs解决方法 我不确定为什么你认为使用Mojo :: URL需要更多代码?在下面的例子中,我从事务中获得了实际的请求URL(可能有重定向,我已经允许),我称之为$base.
然后,由于$base是Mojo :: URL的一个实例,我可以使用$base-> new创建一个新实例.当然,如果这看起来很神奇,你可以用Mojo :: URL-> new替换它.
use Mojo::Base -strict;use Mojo::UserAgent;my $url = 'http://mojolicio.us';my $ua = Mojo::UserAgent->new->max_redirects(10);my $tx = $ua->get($url);my $base = $tx->req->url;$tx->res ->dom ->find('link[rel=stylesheet]') ->map(sub{$base->new($_->{href})->to_abs($base)}) ->each(sub{say}); 总结 以上是内存溢出为你收集整理的perl – Mojo :: DOM快捷方式获取资源的绝对URL?全部内容,希望文章能够帮你解决perl – Mojo :: DOM快捷方式获取资源的绝对URL?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)