对于我的工作,我刮刮网站,并将它们写到gzipped档案中(扩展名为"warc.gz")。我使用Python2.7.11和Warc0.2.1库。
我注意到,对于大多数文件,我无法用warc库完全阅读它们。例如,如果warc.gz文件有517条记录,我只能读取其中的大约200条。
经过一些研究,我发现这个问题只发生在gzipped文件中。扩展名为"warc“的文件没有此问题。
我发现有些人也有这个问题(https://github.com/internetarchive/warc/issues/21),但没有找到解决办法。
我猜想Python2.7.11中的"gzip“中可能有一个bug。也许有人有这方面的经验,并知道如何解决这个问题?
提前感谢!
示例:
我创建如下新的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-库本身中解决的。
发布于 2016-03-23 12:32:56
看来,自定义gzip在warc.gzip2.GzipFile中的处理、用warc.utils.FilePart进行文件分割和在warc.warc.WARCReader中读取似乎是一个整体(使用python2.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()https://stackoverflow.com/questions/36173786
复制相似问题