Mojolicious没有关注webarchive.org的重定向

时间:2013-12-14 20:32:55

标签: perl url redirect mojolicious

我正在使用Mojolicious DOM和UserAgent从Webarchive.org获取页面源,解析它,并将其导入Dotclear数据库(使用webarchive作为备份)。 在源代码中,有“上一页”和“下一页”链接允许访问最初在博客上创建的不同帖子。

我开发的perl脚本应该通过这些链接来导入此博客快照的所有页面。 它首先得到博客的第一篇文章的来源,解析它,将结果放在本地数据库中,并获取“下一步”下的链接,在下一篇文章中做同样的事情,直到没有更多的“下一篇”讯息。

至于基地。

但诀窍是我从源码获得的链接不是Webarchive的链接。 Webarchive的快照链接如下:

http://web.archive.org/web/20131012182412/http://www.mytarget.com/post?mypost

“web”和原始URL之间的大数字是(我猜)快照制作的日期。诀窍是它在每个快照都会发生变化,虽然它可能出现在一个帖子上,但下一篇文章已经在另一个帖子上进行了快照。所以URL不适合。

当我点击我从源码获取的链接时,它会将我带到webarchive.org,它会在我通过的页面上自动搜索,并将我重定向到它。 但是当我尝试通过Mojolicious的get()函数获取源代码时,它只是获取了webarchive的“找不到页面”页面。

所以,有一个问题:有没有办法让mojolicious遵循webarchive的重定向?我在我的UserAgent上激活了max_redirects(5),但仍然是这样。

这是我的代码:

sub main{
    my ($url) = @_;
    my $ua = Mojo::UserAgent->new;
    $ua = $ua->max_redirects(5);
    my $dom = $ua->get($url)->res->dom;

    #...Treatment and parsing of the source ...
    return $nextUrl;
}

my $nextUrl="http://web.archive.org/web/20131012182412/http://www.mytarget.com/post?mypost";
my $secondUrl;

while ($nextUrl){
    $secondUrl = main($nextUrl);
    $nextUrl = $secondUrl;
}

提前致谢...

1 个答案:

答案 0 :(得分:1)

我终于找到了办法。 我使用这段代码来跟踪URL并获得最终到达的URL:

use LWP::UserAgent qw();    
my $ua = LWP::UserAgent->new;
my $ret = $ua->get($url);
$url = $ret->request->uri ."";    
print "URL returned: ".$url."\n";

然后我使用该URL获取源代码并获取它。