2016-09-09 13 views
-2

私は、このような8-Kおよび10-Kのステートメントとして会社提出書類の「完全な提出テキストファイル」を検索し、Perlで書かれたスクリプトを持っています。スクリプトのダウンロードが突然

は、これらのファイルは、.txtファイルがあるにもかかわらず、彼らは実際にはHTMLファイルです。ここでは、これらの特定のファイルのいずれのヘッダの例です。

<SEC-DOCUMENT>0001104659-12-008133.txt : 20120209 
<SEC-HEADER>0001104659-12-008133.hdr.sgml : 20120209 
<ACCEPTANCE-DATETIME>20120209153739 

この特定のファイルは次の場所にあります。https://www.sec.gov/Archives/edgar/data/1001838/000110465912008133/0001104659-12-008133.txt

あなたはあなたが内容を読むことができるファイルをクリックすると、見ることができるように。 「、

±šÜÏ|¨^Ÿ¨T¡š¯À½ä¾<™R¶| [T)S:しかし、このファイルをダウンロードするPerlスクリプトは、次のようなものを見て内容のファイルを生成しますF-àë§+™•μ~¨ÀáÊ'jv-IE・T¡Š¥E-「RZujKk)š|4¨」Þªkä<・nðü³²¥XjSmYÎõ™?÷UF™S [U} HV¢LšDÆ.zjyßýμ "Èoøø²²"šúOª+ &ò'äòDì?Sìyúà¹ÛùD?\üár¡ZÙÉ "òðU†þ"ä+ä ¯RbZåÎS{™òc,ü "ð<2 @N"Òäœr "... _§ ö€Áv6Šì.sOsÙ|¿MÁμì\™ - ••••••••••••••••••••••••••••••••• EU〜Ü〜î¹¥/EäH~...%«ALJ%ÒéüμÆ 『©PU)A8tÚ¡行く•Ü?L?ÿ†‡ß』«@ S-X-w¶bpq§Ég{#A§ >ÃÆ'ââ、¬Å¡ &Uødz$ `¬<μ¶Ò'æ|Öž$äÔ¡×:!ƒj$ U:7μFèDî'®€eŽ¿â「¿〜{«×FE©R¶H8í\WÉÃ||ÖàëÜñ^Uêðž¢ÖVœ -k7zý'j(OL &ª-g೺ö»> 2C†Ÿ¹Õ[VèVijÇXEkª&•W¨'ÞTZ«¯〜Z£uÕÝè-¥7c|ÞÐêÔƒÖªë- rcضμÚýQC½μb-½¥ö> 0'»U- ŸXzûï>öMÚJ½>μîbö-)VkQO¯ìμμ_6ɹmS1î'VŒüšüŸ!Â|ï^Ìμk¤¿©ý¥ÍÍP・J ^¼ê÷Ì<±!¿u- /'nÌöêÚùf} m¥ mY²>¤4'»V |?|Y5žîñN«HgCö1ç,WmãÑ6öýÆ¢»aöªÿÞ¨Ã=«Y°æ1P^»1O¢U7/&})〜ÕR¶」

私は!これが暗号化の最終段階で起こったのかどうか疑問に思う。彼らのウェブサイトを閲覧することから、ネットワークを介して送信されているファイルを暗号化することを認めているようには見えません。私は個人的には、私はブラウザ内でファイルを手動で細かくダウンロードできるので、これが当てはまるとは思わない。ここで

は、ファイルをダウンロードし、ハードドライブに保存する責任があるPerlコードのsegmenetです:

@arraydata = split(/\,/, $datagn[$j]); 
if($arraydata[2] =~ m/8K/ || $arraydata[2] =~ /8\-K/){ 

# Starts crawler, not checking for errors 
my $mech = WWW::Mechanize->new(autocheck => 0); 

# Grabs address 
@arraydatad = split(/\//, $arraydata[4]); 

# Formats output file name 
$filenamea = "Reports\\" . $dirname . "\\" . $cik . "\\" . $arraydatad[3]; 
chomp($filenamea); 

# This is the file from the EDGAR archives 
$filecrawl = "https://www.sec.gov/Archives/" . $arraydata[4]; 

# This crawls the file and saves it to the hard drive 
$mech->get($filecrawl, ':content_file' => $filenamea); 

完全なコードはここにある:http://pastebin.com/QXb1zcdv

誰もがアイデアを持っています私がSEC.govからPerlスクリプトをダウンロードしているときに、なぜナンセンスのファイルを取得しているのですか?

+0

Probablyただ圧縮されます。':content_file'を削除し、' $ response-> decoded_content(charset => 'none') 'を使ってファイルを取得してみてください。より良い方法かもしれない。 – ikegami

+0

デバッグを* *試みましたか?謎のデータの16進ダンプを見ました(印刷可能なビューよりはるかに便利です)? Wiresharkを使用して、クライアントとサーバーの間で交換されるヘッダーを検査しますか? –

答えて

2

:content_fileは、生のコンテンツを特定のファイルにダンプします。 print $ua->res->headers->as_stringを使用して応答のHTTPヘッダーを取得すると、Content-Encoding: gzipヘッダーが表示されます。これは、コンテンツがgzipで圧縮されていることを意味します。保存されたファイルにあるgzip -dcは、圧縮解除されたファイルを提供します。

コメントにikegamiが記載されているため、代わりにdecoded_contentを使用してデータにアクセスする必要があります。名前からわかるように、これは生の内容を与えませんが、必要なデコードを適用します。この場合、復元は次のように行われます。

my $ua = WWW::Mechanize->new(); 
$ua->get('https://www.sec.gov/Archives/edgar/data/1001838/000110465912008133/0001104659-12-008133.txt'); 
print $ua->res->decoded_content;