perl – Mojo :: DOM快捷方式获取资源的绝对URL?
发布时间:2020-12-16 06:13:34 所属栏目:大数据 来源:网络整理
导读:在使用 Mojo::DOM (或任何其他框架)解析网页时,提取可能是相对或绝对的资源地址是相当常见的.有没有一种快捷方法可以将这样的资源地址转换为绝对URL? 以下 mojo 命令拉出mojolicio.us上的所有样式表: $mojo get http://mojolicio.us "link[rel=stylesheet]
在使用
Mojo::DOM (或任何其他框架)解析网页时,提取可能是相对或绝对的资源地址是相当常见的.有没有一种快捷方法可以将这样的资源地址转换为绝对URL?
以下 $mojo get http://mojolicio.us "link[rel=stylesheet]" attr href /mojo/prettify/prettify-mojo-light.css /css/index.css 以下脚本也是如此,但也使用 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 "$cssurln"; } 输出: http://mojolicio.us/mojo/prettify/prettify-mojo-light.css http://mojolicio.us/css/index.css 显然,使用加载DOM的URL,应该在此上下文中使用相对URL.但是,除了自己编写代码之外,我不知道获取资源绝对URL的方法. Mojolicious有 我理想的解决方案是,如果脚本和命令行都可以使用以下内容,但是要查找使用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}); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |