我正在使用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;
}
提前致谢...
答案 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获取源代码并获取它。