私の仕事では、Web サイトをスクレイピングし、gzip 圧縮された Web アーカイブ (拡張子は「warc.gz」) に書き込みます。Python 2.7.11 と warc 0.2.1 ライブラリを使用しています。
ほとんどのファイルは、warc-library で完全に読み取ることができないことに気付きました。たとえば、warc.gz ファイルに 517 個のレコードがある場合、そのうち約 200 個しか読み取ることができません。
いくつかの調査の結果、この問題は gzip されたファイルでのみ発生することがわかりました。拡張子が「warc」のファイルには、この問題はありません。
一部の人々もこの問題を抱えていることがわかりました(https://github.com/internetarchive/warc/issues/21)が、解決策は見つかりませんでした。
Python 2.7.11 の "gzip" にバグがあるのではないかと推測しています。誰かがこれを経験したことがあり、この問題について何ができるか知っていますか?
前もって感謝します!
例:
次のような新しい warc.gz ファイルを作成します。
import warc
warc_path = "\\some_path\file_name.warc.gz"
warc_file = warc.open(warc_path, "wb")
私が使用するレコードを書くには:
record = warc.WARCRecord(payload=value, headers=headers)
warc_file.write_record(record)
これにより、完璧な「warc.gz」ファイルが作成されます。それらに問題はありません。「\r\n」を含むすべてが正しいです。しかし、問題はこれらのファイルを読んだときに始まります。
私が使用するファイルを読み取るには:
warc_file = warc.open(warc_path, "rb")
私が使用するレコードをループするには:
for record in warc_file:
...
問題は、この「warc.gz」ファイルのループ中にすべてのレコードが検出されるわけではなく、「warc」ファイルのすべてのレコードが検出されることです。両方のタイプのファイルでの作業は、warc-library 自体で対処されています。