我正试图使用以下链接中的工具箱用python打开一个warc文件:http://warc.readthedocs.org/en/latest/
使用打开文件时
import warc
f = warc.open("00.warc.gz")
一切都很好,f对象是:
<warc.warc.WARCFile instance at 0x1151d34d0>
然而,当我试图使用读取文件中的所有内容时
for record in f:
print record['WARC-Target-URI'], record['Content-Length']
出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/xxx/anaconda/lib/python2.7/site-packages/warc/warc.py", line 390, in __iter__
record = self.read_record()
File "/Users/xxx/anaconda/lib/python2.7/site-packages/warc/warc.py", line 373, in read_record
header = self.read_header(fileobj)
File "/Users/xxx/anaconda/lib/python2.7/site-packages/warc/warc.py", line 331, in read_header
raise IOError("Bad version line: %r" % version_line)
IOError: Bad version line: 'WARC/0.18n'
这是因为我使用的warc工具箱不支持我的warc文件版本还是其他原因?
ClueWeb09数据集有WARC 0.18格式。然而,它有几个问题。有些记录格式不正确。
最普遍的问题是WARC标头中有一个额外的换行符。还有一些其他格式错误的标头的情况。
此外,它没有使用标准的\r\n行尾标记,这实际上是您的问题。
warc-clueweb库可以处理它。这是一个特殊的python库,用于处理ClueWeb09 warc文件。根据文件
只对原始库进行了小的修改。warc图书馆的原始文件仍然保存着
是的,感谢@睫毛对这个问题的解释。
事实上,Cleweb-09中的一些记录格式错误。但官方的warc库和上述推荐的git-reo-warc-clueweb库都存在一些问题。
这个fork-repo无法处理Clueweb12数据集,另一个问题是,在处理每个.warc.gz文件时,它可能会错过1-2个文档。
因此,我修改了一些代码以同时支持Clueeb09和Cluew12数据集。这是我的repo,它已经在1000亿页上进行了测试,我的warc工具从warc-clueweb库和官方repo分叉并更改。