Python 无法完全读取"warc.gz"文件



在我的工作中,我抓取网站并将其写入gzip web档案(扩展名为"warc.gz")。我使用Python 2.7.11和warc 0.2.1库。

我注意到,对于大多数文件,我无法使用warc库完全阅读它们。例如,如果warc.gz文件有517条记录,我只能读取其中的200条。

经过一些研究,我发现这个问题只发生在gzipped文件中。扩展名为"warc"的文件不存在此问题。

我发现有些人也有这个问题(https://github.com/internetarchive/warc/issues/21),但没有找到解决方案。

我想Python 2.7.11中的"gzip"可能有一个错误。也许有人对此有经验,知道该怎么办吗?

提前感谢!

示例:

我创建新的warc.gz文件如下:

import warc
warc_path = "\some_pathfile_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库中进行处理。

似乎warc.gzip2.GzipFile中的自定义gzip处理、warc.utils.FilePart中的文件拆分和warc.warc.WARCReader中的读取作为一个整体被破坏了(用python 2.7.9、2.7.10和2.7.11测试)。当它没有接收到数据而不是新的头时,它会短暂停止。

基本的stdlib gzip似乎可以很好地处理链接文件,因此这也应该起作用:

import gzip
import warc
with gzip.open('my_test_file.warc.gz', mode='rb') as gzf:
    for record in warc.WARCFile(fileobj=gzf):
        print record.payload.read()

相关内容

  • 没有找到相关文章

最新更新