用python打开warc文件

时间:2014-09-11 10:16:10

标签: python-2.7 warc

我正在尝试使用以下链接中的工具箱打开带有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.18\n'

这是因为我正在使用的warc工具箱不支持我的warc文件版本吗?

2 个答案:

答案 0 :(得分:4)

ClueWeb09数据集以WARC 0.18格式提供。但是,它有几个问题。有些记录是malformed

  

最普遍的问题是WARC标头中有一个额外的换行符。还有一些其他格式错误的标题也是如此。

此外,它不使用标准\ r \ n行尾标记,这实际上是你的问题。

warc-clueweb library可以处理它。这是一个特殊的python库,可以与ClueWeb09 WARC文件一起使用。根据文件

  

仅对原始库进行了少量修改。 warc库的原始文档仍然存在

答案 1 :(得分:0)

是的,感谢@eyelash对此问题的解释。

实际上Clueweb-09中的一些记录格式不正确。但官方warc库和上面推荐的git repo warc-clueweb library都存在一些问题。

这个fork repo无法处理Clueweb12数据集,另一个问题是它在处理每个.warc.gz文件时可能会错过1-2个文档。

所以我改变了一些代码来支持Clueweb09和Cluewe12数据集。这是我的回购已经在1000亿页面上进行了测试,my warc tools分叉并从warc-clueweb库和官方回购中更改。