Java 如何使用HeaderedArchiveRecord和Heritrix 3.1循环WARC文件

Java 如何使用HeaderedArchiveRecord和Heritrix 3.1循环WARC文件,java,heritrix,warc,Java,Heritrix,Warc,我正在使用Heritrix 3.1 Java库。要明确的是,我对爬行不感兴趣,只对处理另一个团队生成的压缩WARC(*.WARC.gz)文件中的数据感兴趣。对于存储在WARC文件中的每个WWW文档,我需要一些来自记录头的信息,一些来自HTTP头的信息,以及HTTP有效负载/正文的完整内容,因此我认为我需要使用HeaderedArchiveRecord类 WARCReader warcReader = WARCReaderFactory.get(warcFile); int inputSequen

我正在使用Heritrix 3.1 Java库。要明确的是,我对爬行不感兴趣,只对处理另一个团队生成的压缩WARC(*.WARC.gz)文件中的数据感兴趣。对于存储在WARC文件中的每个WWW文档,我需要一些来自记录头的信息,一些来自HTTP头的信息,以及HTTP有效负载/正文的完整内容,因此我认为我需要使用HeaderedArchiveRecord类

WARCReader warcReader = WARCReaderFactory.get(warcFile);
int inputSequence = -1;

ArchiveRecord record = warcReader.get();
while(record != null){
  inputSequence++;

  // Skip the 0th record, which is just the archive guff.
  if (inputSequence == 0) {
    // print some info but do not process this record
  }
  else if (! record.hasContentHeaders()) {
    // print some info but do not process this record
  }
  else  {
    HeaderedArchiveRecord hRecord = new HeaderedArchiveRecord(record);
    ArchiveRecordHeader archiveHeader = hRecord.getHeader();
    gate.Document document = makeDocumentHeritrix(archiveHeader,
       inputSequence,  hRecord);
    //...
  }
  record.close();
  record = warcReader.get();  // line 754
}

warcReader.close();
当我运行这个时,我得到一个异常,原因如下

Caused by: java.io.IOException: Failed to read WARC_MAGIC
    at org.archive.io.warc.WARCRecord.parseHeaders(WARCRecord.java:116)
    at org.archive.io.warc.WARCRecord.<init>(WARCRecord.java:90)
    at org.archive.io.warc.WARCReader.createArchiveRecord(WARCReader.java:94)
    at org.archive.io.warc.WARCReader.createArchiveRecord(WARCReader.java:44)
    at org.archive.io.ArchiveReader.get(ArchiveReader.java:159)
    at
gate.arcomem.batch.Enrichment.makeCorpusWithHeritrix(Enrichment.java:754)
原因:java.io.IOException:无法读取WARC\u MAGIC
位于org.archive.io.warc.WARCRecord.parseHeaders(WARCRecord.java:116)
位于org.archive.io.warc.WARCRecord(WARCRecord.java:90)
位于org.archive.io.warc.WARCReader.createArchiveRecord(WARCReader.java:94)
位于org.archive.io.warc.WARCReader.createArchiveRecord(WARCReader.java:44)
位于org.archive.io.ArchiveReader.get(ArchiveReader.java:159)
在
gate.arcomem.batch.Enrich.MakeCopuswithheriTrix(enrich.java:754)
我的第754行如上所示。我的
makeDocumentHeritrix(…)
方法中的代码用于引发类似的异常,但在移动行
hrecord.skiphtpheader()之前,
未能找到WARC_MAGIC
to before
Header[]httpHeader=record.getContentHeaders()在它里面


我曾尝试在web上搜索用于循环WARC文件中记录的代码示例,但没有找到任何示例,我记得几年前我使用heritrix 1.14做类似的事情时,我不得不做一些奇怪的事情来操纵文件中的偏移量,但WARCReader中的相关方法现在都是私有的或受保护的,因此,我不希望对较新的库执行此操作。

我成功地使用了以下代码:

Iterator<ArchiveRecord> archIt = WARCReaderFactory.get(new File(args[0])).iterator();
while (archIt.hasNext()) {
     handleRecord(archIt.next());
}
Iterator archIt=WARCReaderFactory.get(新文件(args[0])).Iterator(); while(archIt.hasNext()){ HandlerRecord(archIt.next()); }