基于标题将WARC文件拆分为块:WARC/1.0 Python

基于标题将WARC文件拆分为块:WARC/1.0 Python,python,html,dictionary,file-processing,warc,Python,Html,Dictionary,File Processing,Warc,我是编程新手,正在尝试通过将WARC文件拆分成块,然后将每个块存储在字典中来处理WARC文件 每个块都应该以WARC/1.0头开始,并由3个空行分隔。我还想删除前两段: WARC/1.0 WARC-Type: warcinfo WARC-Date: 2020-08-04T01:43:40Z WARC-Record-ID: <urn:uuid:959ea654-33fd-466b-b1bf-f08aa8abe774> Content-Length: 500 Content-Type:

我是编程新手,正在尝试通过将WARC文件拆分成块,然后将每个块存储在字典中来处理WARC文件

每个块都应该以WARC/1.0头开始,并由3个空行分隔。我还想删除前两段:

WARC/1.0
WARC-Type: warcinfo
WARC-Date: 2020-08-04T01:43:40Z
WARC-Record-ID: <urn:uuid:959ea654-33fd-466b-b1bf-f08aa8abe774>
Content-Length: 500
Content-Type: application/warc-fields
WARC-Filename: CC-MAIN-20200804014340-20200804044340-00045.warc.gz

isPartOf: CC-MAIN-2020-34
publisher: Common Crawl
description: Wide crawl of the web for August 2020
operator: Common Crawl Admin (info@commoncrawl.org)
hostname: ip-10-67-67-22.ec2.internal
software: Apache Nutch 1.17 (modified, https://github.com/commoncrawl/nutch/)
robots: checked via crawler-commons 1.2-SNAPSHOT (https://github.com/crawler-commons/crawler-commons)
format: WARC File Format 1.1
conformsTo: http://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/
WARC/1.0
WARC类型:warcinfo
WARC日期:2020-08-04T01:43:40Z
WARC记录ID:
内容长度:500
内容类型:应用程序/warc字段
WARC文件名:CC-MAIN-2020080401440-2020080444340-00045.WARC.gz
isPartOf:CC-MAIN-2020-34
发布者:普通爬网
描述:2020年8月的网络大爬网
操作员:公共爬网管理员(info@commoncrawl.org)
主机名:ip-10-67-67-22.ec2.internal
软件:Apache Nutch 1.17(已修改,https://github.com/commoncrawl/nutch/)
机器人:通过crawler commons 1.2-SNAPSHOT进行检查(https://github.com/crawler-commons/crawler-commons)
格式:WARC文件格式1.1
符合:http://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/
#把一切都从这里放下:

WARC/1.0
WARC-Type: request
WARC-Date: 2020-08-04T03:25:25Z
WARC-Record-ID: <urn:uuid:6c0b749a-4d02-4a77-ab93-9bc4ba094cdc>
Content-Length: 303
Content-Type: application/http; msgtype=request
WARC-Warcinfo-ID: <urn:uuid:959ea654-33fd-466b-b1bf-f08aa8abe774>
WARC-IP-Address: 104.254.66.40
WARC-Target-URI: http://00.auto.sohu.com/d/details?cityCode=450100&planId=1450&trimId=145372
WARC/1.0
WARC类型:请求
WARC日期:2020-08-04T03:25:25Z
WARC记录ID:
内容长度:303
内容类型:应用程序/http;msgtype=请求
WARC Warcinfo ID:
WARC IP地址:104.254.66.40
WARC目标URI:http://00.auto.sohu.com/d/details?cityCode=450100&planId=1450&trimId=145372
我曾尝试使用生成器对块进行分组,但它只返回一个组(整个文件)。有没有一个简单的方法来区分这些

我无法导入任何库


任何帮助都将不胜感激

到目前为止,完成此任务的最佳方法是使用warcio库,它知道如何正确地将warc文件解析为记录

除此之外,我会将warcio代码复制到您的代码中(许可证是允许的)

Warc文件很复杂,使用经过充分测试和广泛使用的库是解析它们的正确方法


如果您是从公共爬网下载数据,我还建议您查看我的python包cdx_工具包。它在引擎盖下使用warcio,并处理下载步骤。

欢迎使用SO。请发布相关代码。请参阅WARC文件通常是逐记录压缩的(.WARC.gz)。如果是这种情况(对于普通爬网中的WARC文件,这是绝对正确的),则可以在出现以下情况时拆分二进制文件。或者,读取gzip流,如果它耗尽,则到达当前WARC记录的末尾。当然,如果连Python标准库模块()的导入都被禁止,那么这是没有意义的。是这样吗?