我想读一个warc文件,我根据this page编写了以下代码,但没有打印出来!!
>>import warc
>>f = warc.open("01.warc.gz")
>>for record in f:
print record['WARC-Target-URI'], record['Content-Length']
然而,当我写下以下命令时,我得到了结果
>>print f
<warc.warc.WARCFile instance at 0x0000000002C7DE88>
请注意,我的warc文件是Clueweb09数据集中的文件之一。我之所以提到它是因为this page。
答案 0 :(得分:2)
我和你有同样的问题。
经过对模块的一些研究,我找到了解决方案。
尝试使用record.payload.read()
,这是完整的示例:
import warc
f = warc.open("01.warc.gz")
for record in f:
print record.payload.read()
另外,我可以说您不仅可以阅读warc
个文件,还可以阅读wet
个文件。小作弊是将其重命名为名称,其中包含.warc
亲切的问候
答案 1 :(得分:0)
首先,WARC或Web ARChive是网页的归档格式。
读取warc
文件有点棘手,因为它包含一些特殊的标题。
假设您的warc
文件属于this format。
您可以使用以下代码为包含元数据和内容的每条记录加载,解析和返回字典。
def read_header(file_handler):
header = {}
line = next(file_handler)
while line != '\n':
key, value = line.split(': ', 1)
header[key] = value.rstrip()
line = next(file_handler)
return header
def warc_records(path):
with open(path) as fh:
while True:
line = next(fh)
if line == 'WARC/1.0\n':
output = read_header(fh)
if 'WARC-Refers-To' not in output:
continue
output["Content"] = next(fh)
yield output
您可以按如下方式访问字典:
records = warc_records("<some path>')
>>> next_record = next(records)
>>> sorted(next_record.keys())
['Content', 'Content-Length', 'Content-Type', 'WARC-Block-Digest', 'WARC-Date', 'WARC-Record-ID', 'WARC-Refers-To', 'WARC-Target-URI', 'WARC-Type', 'WARC-Warcinfo-ID']
>>> next_record['WARC-Date']
'2013-06-20T00:32:15Z'
>>> next_record['WARC-Target-URI']
'http://09231204.tumblr.com/post/44534196170/high-res-new-photos-of-the-cast-of-neilhimself'
>>> next_record['Content'][:30]
'Side Effects high res. New pho'