WWW :: Perl中的机械化,脚本被杀死

时间:2012-07-31 17:21:34

标签: perl www-mechanize

我编写了一个Perl脚本,它使用WWW :: Mechanize连接到一个站点,登录然后访问该站点内的几个页面。这一切都很好,但是,当我尝试访问大量页面时,脚本会被杀死。我确信这与HTTP服务器的配置和配置的连接限制无关。这是因为脚本在我自己的网站上运行。

以下是我的剧本的高级概述:

$url="http://example.com";
$mech=WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);

使用表单字段登录该站点。

现在,一旦我登录,我就会按如下方式连接到网站中的网址:

$ i是for循环中的迭代计数器

$internal_url="http://example.com/index.php?page=$i";

$mech->get($internal_url);

在返回的页面上执行一些操作($ mech->内容使用HTML :: TreeBuilder :: XPath)

现在,我迭代连接到不同internal_url的for循环,因为$ i的值在每次迭代中都会递增。

正如我所说,这一切都很好。但是,大约180页之后,脚本就会被杀死。

可能是什么原因?我曾多次尝试过。

我甚至添加了$ mech->删除;就在FOR循环结束之前,以防止任何内存泄漏。

但是,唯一的问题是由$ mech维护的登录会话将因此而被销毁。

我已多次尝试过这个脚本,在访问相同数量的页面后总会被杀死。

感谢。

1 个答案:

答案 0 :(得分:3)

试试这段代码:

$mech=WWW::Mechanize->new();
$mech->stack_depth(0);

OR

$mech=WWW::Mechanize->new(stack_depth=>0);
  

根据文档:获取或设置页面堆栈深度。使用此if   你正在做大量的页面抓取和内存耗尽。

     

值为0表示“根本没有历史记录”。默认情况下,最大堆栈   深度非常大,有效地保留了所有的历史。

相关问题