0

嗨,我正在开发一个有趣的项目,使用常见的爬网数据我有一个从这里开始的最新爬网 warc 文件路径的子集

所以基本上我有一个像https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2020-45/segments/1603107863364.0/warc/CC-MAIN-20201019145901-20201019175901-00000.warc.gz这样的网址(warc 路径中的第一个 url),我在请求中流式传输,如下所示:

s = requests.Session()

resp = s.get(url, headers=headers, stream=True)
print(resp.status_code)
for line in stream_gzip_decompress(resp):
     print(line.decode('utf-8'))

def stream_gzip_decompress(stream):
   dec = zlib.decompressobj( 32+ zlib.MAX_WBITS)  # offset 32 to skip the header
   for chunk in stream:
      rv = dec.decompress(chunk)
      if rv:
          yield rv

从Python解压缩字节流的stream_gzip_decompress ?

前三个块似乎可以很好地解压并打印出来,然后脚本就永远挂起(我只等了大约 8 分钟。它似乎仍在运行这些块,但被抓住了,if rv:所以不会产生任何东西,但似乎仍然以字节为单位。

4

1 回答 1

1

为什么不使用 WARC 解析器库(我推荐warcio)进行解析,包括 gzip 解压缩?

或者,查看gzipstream以从 gzip 压缩内容流中读取并即时解压缩数据。

于 2020-12-01T08:02:57.093 回答