【发布时间】:2013-12-14 20:32:55
【问题描述】:
我正在使用 Mojolicious DOM 和 UserAgent 从 Webarchive.org 获取页面源,对其进行解析,然后将其导入 Dotclear 数据库(使用 webarchive 作为备份)。 在源代码中,有“上一个”和“下一个”链接允许访问最初在博客上发布的不同帖子。
我开发的 perl 脚本应该通过这些链接运行以导入此博客快照的所有页面。 它首先获取博客第一篇文章的来源,对其进行解析,将结果放入本地数据库中,并获取“Next”下的链接在下一篇文章中执行相同的操作,直到没有更多的“Next”帖子。
至于基地。
但诀窍是我从源获得的链接不是 Webarchive 的链接。 Webarchive 的快照链接如下所示:
http://web.archive.org/web/20131012182412/http://www.mytarget.com/post?mypost
“web”和原始 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;
}
提前谢谢...
【问题讨论】:
-
也许将 MOJO_USERAGENT_DEBUG 环境变量设置为 1 会为您提供一些见解。
-
似乎是个有趣的问题,你能发一个更真实的链接让我试试吗?
标签: perl url redirect mojolicious