2013-12-14 43 views
0

我使用Mojolicious DOM和UserAgent从Webarchive.org获取页面的源代码,解析并将其导入Dotclear数据库(使用webarchive作为备份)。 在源代码中,有“上一个”和“下一个”链接,可以访问博客上原创的不同帖子。Mojolicious没有遵循webarchive.org的重定向

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

至于基地。

但诀窍是我从源获得的链接不是Webarchive的链接。 Webarchive的快照链接是这样的:

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

“网”和原始URL之间的大数字(我猜)创建快照的日期。关键在于它在每个快照中都会发生变化,虽然它可能出现在一篇文章中,但下一篇文章已经在另一个日期上进行了快照。所以URL不适合。

当我点击从源代码获得的链接时,它会将我带到webarchive.org,它会自动在我传递的页面上进行搜索,然后将其重定向到它。 但是,当我尝试通过Mojolicious的get()函数获取源代码时,它只是获取webarchive的“Page not found”页面。

所以,有我的问题:有没有办法让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; 
} 

在此先感谢...

+0

也许将MOJO_USERAGENT_DEBUG环境变量设置为1将为您提供一些见解。 – sshaw

+0

看起来像一个有趣的问题,你能发布一个更现实的链接,所以我可以试试吗? –

回答

1

我终于找到了解决的方法。 我使用这段代码遵循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来获取源代码,并把它拿来。