从SEC网站高效下载10-K文件

时间:2017-04-21 20:08:32

标签: perl edgar

我使用以下perl代码从SEC网站大量下载10-K。但是,我得到了“内存不足!”当脚本显然卡在处理特别大的10-K文件时,每隔几百个文件就会发出消息。任何想法我怎么能避免这种“内存不足!”大文件的错误?

function RegexValidation() {
  if [ "$2" = "fqdn" ]; then
    if ! echo "$1" | grep -q -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-z0-9_\-]{1,63}\.?)+(?:[a-z]{2,})$)'; then
      echo "ERROR - $1 is not a valid FQDN"
      return 1
    fi
    return 0
  fi
}

while :; do
  read -e -r -p "Enter the Fully Qualified Domain Name > " fqdn
  if RegexValidation "$fqdn" fqdn
  then break
  fi
done

1 个答案:

答案 0 :(得分:1)

我最近遇到了使用线程和数千个LWP请求的类似问题。从来没有弄清楚内存泄漏是什么,但切换到HTTP :: Tiny解决了它。

LWPHTTP::Tiny很简单:

use HTTP::Tiny;

my $ua = HTTP::Tiny->new;

my $response =$ua->get($get_file);
if ($response->{success}) {
    print OUT $response->{content};

...当然HTTP::Tiny可以为您执行保存部分,例如LWP

你也可以尝试在循环中创建一个新的LWP对象,希望垃圾收集能够启动,但它对我来说也不起作用。 LWP怪物内部有东西泄漏。

编辑:尝试将2gb文件下载到字符串中时可能会出现问题,mirror方法应该为您解决此问题。