帮酷LOGO
  • 显示原文与译文双语对照的内容
Streaming WARC/ARC library for fast web archive IO

  • 源代码名称:warcio
  • 源代码网址:http://www.github.com/webrecorder/warcio
  • warcio源代码文档
  • warcio源代码下载
  • Git URL:
    git://www.github.com/webrecorder/warcio.git
  • Git Clone代码到本地:
    git clone http://www.github.com/webrecorder/warcio
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/webrecorder/warcio
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • WARCIO: WARC ( 还有 arc ) 流库 https://travis-ci.org/webrecorder/warcio.svg?branch=masterhttps://coveralls.io/repos/github/webrecorder/warcio/badge.svg?branch=master

    背景

    这个库提供了一种快速。独立的方式来读取和写入 WARC格式( 通常用于web归档中) 。 支持 python 2.7 + 和 python 3.3 + ( 使用,这是唯一的外部依赖项)

    安装:pip install warcio

    这个库是 pywb的WARC读写组件的一个旋转,它是Webrecorder文件的关键组件。

    库是为快速。低级别访问网络档案内容而设计的,面向一个WARC记录流,而不是文件。

    读取WARC记录

    库的一个关键特性是能够使用 ArchiveIterator 遍历WARC记录流

    它包括以下功能: - 读取 WARC/arc 流- 在 arc 到WARC记录转换- 解压缩和存储 WARC/arc 文件中存储的HTTP负载内容。

    例如以下输出用于每个 WARC response 记录的url:

    from warcio.archiveiterator import ArchiveIteratorwithopen('path/to/file', 'rb') as stream:
     for record in ArchiveIterator(stream):
     if record.rec_type =='response':
     print(record.rec_headers.get_header('WARC-Target-URI'))

    流对象可以是磁盘上的文件,也可以是远程网络流。 ArchiveIterator 在一次传递中读取WARC内容。 recordArcWarcRecord 对象表示,对象包含格式( arc 或者 WARC ) 。记录类型。记录头。http头( 如果有的话) 和用于读取负载的原始流。

    classArcWarcRecord(object):
     def__init__(self, *args):
     (self.format, self.rec_type, self.rec_headers, self.raw_stream,
     self.http_headers, self.content_type, self.length) = args

    读取WARC内容

    raw_stream 可以用来直接读取负载的其余部分。 特殊的ArcWarcRecord.content_stream() 函数提供了一个流,它可以以自动解压缩和分块HTTP负载,如果它是压缩和/或者传输。

    arc-文件

    库提供了读取( 但不写 arc ) 文件的支持。 arc 格式是传统的,但在一致性方面很重要。 ArchiveIterator 可以同样地迭代 arc 和WARC文件以发出 ArcWarcRecord 对象。 特殊 arc2warc 选项动态将 arc 记录转换为 WARCs,允许使用相同的API访问它们。

    ( ArchiveIterator的特殊 WARCIteratorARCIterator 子类也可以用于只读WARC或者 arc 文件) 。

    WARC和 arc-流

    例如下面是使用相同API读取 arc 和WARC的代码 Fragment 。

    示例通过使用请求,打印 warcinfo 记录( 或者 arc header ) 和包含HTML的任何响应记录( 或者所有 arc 记录),通过HTTP传递一个WARC和 arc 文件:

    import requestsfrom warcio.archiveiterator import ArchiveIteratordefprint_records(url):
     resp = requests.get(url, stream=True)
     for record in ArchiveIterator(resp.raw, arc2warc=True):
     if record.rec_type =='warcinfo':
     print(record.raw_stream.read())
     elif record.rec_type =='response':
     if record.http_headers.get_header('Content-Type') =='text/html':
     print(record.rec_headers.get_header('WARC-Target-URI'))
     print(record.content_stream().read())
     print('')# WARCprint_records('https://archive.org/download/ExampleArcAndWarcFiles/IAH-20080430204825-00000-blackbook.warc.gz')# ARC with arc2warcprint_records('https://archive.org/download/ExampleArcAndWarcFiles/IAH-20080430204825-00000-blackbook.arc.gz')

    写入WARC记录

    库为编写符合 1.0 ISO标准 ( 查看草稿) 规范的WARC记录提供了一个简单且可以扩展的接口。

    库带有一个基本的WARCWriter 类,用于写入单个WARC文件和 BufferWARCWriter,用于写入内存缓冲区。 可以扩展 BaseWARCWriter 以支持更复杂的操作。

    ( 不支持写入旧版 arc 文件)

    下面的示例加载 http://example.com/,创建一个WARC响应记录,并写入它,gzip压缩到 example.warc.gz,并自动计算负载摘要。

    from warcio.warcwriter import WARCWriterfrom warcio.statusandheaders import StatusAndHeadersimport requestswithopen('example.warc.gz', 'wb') as output:
     writer = WARCWriter(output, gzip=True)
     resp = requests.get('http://example.com/',
     headers={'Accept-Encoding': 'identity'},
     stream=True)
     # get raw headers from urllib3 headers_list = resp.raw.headers.items()
     http_headers = StatusAndHeaders('200 OK', headers_list, protocol='HTTP/1.0')
     record = writer.create_warc_record('http://example.com/', 'response',
     payload=resp.raw,
     http_headers=http_headers)
     writer.write_record(record)

    库还包括其他语义,用于: - 创建 warcinforevisit 记录- 编写 responserequest 记录- 编写自定义WARC记录- 从流读取完整的WARC记录

    请参考 warcwriter.py测试/test_writer 。py以获得更多的示例。

    WARCIO: 索引和重新压缩

    这个库目前附带了两个简单的命令行 工具。

    索引

    warcio index 将在warc文件中打印一个简单的索引索引,作为换行的JSON行( NDJSON ) 。

    可以通过 -f 标志指定索引中包含的WARC header 字段,并包含在 JSON block ( 为了方便) 中。

    warcio index./test/data/example-iana.org-chunked.warc -f warc-type,warc-target-uri,content-length
    {"warc-type":"warcinfo","content-length":"137"}
    {"warc-type":"response","warc-target-uri":"http://www.iana.org/","content-length":"7566"}
    {"warc-type":"request","warc-target-uri":"http://www.iana.org/","content-length":"76"}

    可以通过前缀 http: 前缀前缀来包含 HTTP header 字段。 特殊字段 offset 指warc文件中的记录偏移量。

    warcio index./test/data/example-iana.org-chunked.warc -f offset,content-type,http:content-type,warc-target-uri
    {"offset":"0","content-type":"application/warc-fields"}
    {"offset":"405","content-type":"application/http;msgtype=response","http:content-type":"text/html; charset=UTF-8","warc-target-uri":"http://www.iana.org/"}
    {"offset":"8379","content-type":"application/http;msgtype=request","warc-target-uri":"http://www.iana.org/"}

    ( 注:这里库不产生与网站档案相关的CDX或者CDXJ格式索引。 要创建这些索引,请查看扩展了索引的 cdxj索引器工具,以提供这里功能。

    压缩

    recompress 命令允许将 WARC ( 或者 arc ) 文件压缩或者规范化到记录压缩的。压缩的WARC文件中。

    每个WARC记录分别被压缩和连接。 这是 Webrecorder 和其他网络归档机构使用的'规范化'warc存储格式,通常使用 .warc.gz 扩展存储。

    它可以用于: 压缩压缩的WARC - 将任何 arc 文件转换为压缩的WARC - 修复一个不正确压缩的WARC文件( 例如。 完全压缩的WARC,而不是按记录

    warcio recompress./input.arc.gz./output.warc.gz

    许可证

    warcio 是在 Apache 2.0许可以证下授权的,并且是Webrecorder项目的一部分。

    有关详细信息,请参阅通知许可证。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语