WWW::Scripter 包在用于网页抓取时使用 1.2GB 内存

问题描述 投票:0回答:1

我一开始就对这个包不太熟悉。我发现 use_plugin('JavaScript') 方法通过分析器消耗了大量内存。我将此方法替换为插件(“JavaScript”),尽管内存消耗较低,但我无法通过我应该废弃的网站的登录页面表单。

全局定义:

my $scripter = WWW::Scripter->new();
$scripter->use_plugin('JavaScript')
if(my $form = $scripter->form_with_fields("Password")){
  $form->value('Password', $conf->{'moxa_p'});
  $form->submit();
}else{
  print "dbg +> form 1.0 not found";
}

尝试使用delete和undef关键字,但根本没有帮助!

perl web-scraping web www-mechanize
1个回答
0
投票

减少缓存页面堆栈 (WWW::Scripter WWW::Mechanize)

在 WWW::Scripter 中使用 max_docs 或在 WWW::Mechanize 中使用 stack_depth。 WWW::Machanize 手册页建议设置为 5 或 10。

man WWW::脚本编写者

最大文档
要保留在历史记录中的文档对象的最大数量(及其相应的请求和响应对象)。如果省略,将使用 Mech 的 stack_深度 + 1。这个值减少了 1,因为 stack_depth 是您可以返回的页面数,因此它比记录的页面数少 1。 max_docs 认为 0 相当于无穷大。

man WWW::机械化

“stack_深度=> $值”
设置跟踪所有下载页面的页面堆栈深度。默认值实际上是无限的堆栈大小。如果堆栈正在耗尽您的内存,请将其设置为较小的数字,例如 5 或 10。将其设置为零意味着 Mech 将不保留历史记录。

© www.soinside.com 2019 - 2024. All rights reserved.