2016-10-18 2 views
0

Я хочу прочитать файл warc, и я написал следующий код на основе this page, но ничего не было распечатано !!Прочтите файл warc с python

>>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> 

Обратите внимание, что мой файл ВАКР является одним из файла с Clueweb09 данных. Я упомянул об этом из-за this page.

+0

Похоже, что принятый ответ на вопрос, который вы связаны с имеет решение. Вы попробовали это? – cco

+0

@cco первый коробка кода не печатает. – user3487667

ответ

0

У меня была такая же проблема, как и вы.

После некоторых исследований по модулю я нашел решение.

Попробуйте использовать record.payload.read(), вот полный пример:

import warc 
f = warc.open("01.warc.gz") 
for record in f: 
    print record.payload.read() 

Кроме того, я могу сказать, что вы не можете читать только warc файлы, но wet тоже. Малый чит для переименования его имя, которое содержит .warc

Сердечные приветы

0

Прежде всего, WARC, или веб-архива, это архивный формат для веб-страниц. Чтение файла 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' 
Смежные вопросы