对于我的工作,我抓取网站并将它们写入 gzip 压缩的网络档案(扩展名为“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")
Run Code Online (Sandbox Code Playgroud)
要写记录,我使用:
record = warc.WARCRecord(payload=value, headers=headers)
warc_file.write_record(record)
Run Code Online (Sandbox Code Playgroud)
这将创建完美的“warc.gz”文件。他们没有问题。所有,包括“\r\n”都是正确的。但是当我阅读这些文件时问题就开始了。
要读取我使用的文件:
warc_file = warc.open(warc_path, "rb")
Run Code Online (Sandbox Code Playgroud)
要遍历我使用的记录:
for record in warc_file:
...
Run Code Online (Sandbox Code Playgroud)
问题是在此循环中,并非所有记录都被找到,“warc.gz”文件,而它们都被找到“warc”文件。使用这两种类型的文件在 warc-library 本身中得到解决。