2017-08-28 4 views
1

Amazon S3からWATアーカイブセグメントのサブセットをダウンロードしたいと考えています。一般的なクロールインデックスサーバーからWATアーカイブのサブセットのオフセットと長さを取得

背景:AWS S3のWARCファイルの場所に関する情報をhttp://index.commoncrawl.org利回り結果の一般的なクロール、インデックスを検索

。例えば、url=www.celebuzz.com/2017-01-04/*&output=jsonを検索する

{ "urlkey":"com,celebuzz)/2017-01-04/watch-james-corden-george-michael-tribute", ... "filename":"crawl-data/CC-MAIN-2017-34/segments/1502886104631.25/warc/CC-MAIN-20170818082911-20170818102911-00023.warc.gz", ... "offset":"504411150", "length":"14169", ... }

filenameエントリは、この特定のページのWARCファイルを含むアーカイブセグメントを示している一方がJSON形式の結果をもたらします。このアーカイブファイルは膨大です。幸いなことに、エントリにはoffsetlengthフィールドも含まれ、アーカイブセグメントの関連するサブセットを含むバイトの範囲を要求するために使用できます(たとえば、lines 22-30 in this gistを参照)。

私の質問:

WARCファイルセグメントの位置を考えると、私は、対応するWATアーカイブセグメントの名前を構築する方法を知っている(参照、例えば、this tutorial)。 WATファイルのサブセットが必要なだけなので、バイトの範囲を要求したいと思います。しかし、WATアーカイブセグメントの対応するオフセットと長さを見つけるにはどうすればよいですか?

一般的なクロールインデックスサーバーのAPI documentationを確認しましたが、これも可能であることはわかりません。しかし、そうであれば、私はこの質問を投稿しています。

答えて

1

共通クロールインデックスには、WATファイルとWETファイルへのオフセットは含まれません。したがって、唯一の方法は、WAT/WETファイル全体で目的のレコード/ URLを検索することです。最終的には、WARCファイルとWAT/WETファイルのレコード順序が同じであるため、オフセットを推定することは可能です。

+0

これは私が疑ったものです。 – jmtroos

0

私はPythonでWARCファイルから範囲を取得するために管理していた多くの試行錯誤の後とboto3以下の方法:残りの部分は、最適化され

# You have this form the index 
offset, length, filename = 2161478, 12350, "crawl-data/[...].warc.gz" 

import boto3 
from botocore import UNSIGNED 
from botocore.client import Config 

# Boto3 anonymous login to common crawl 
s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED)) 

# Count the range 
offset_end = offset + length - 1 
byte_range = 'bytes={offset}-{end}'.format(offset=2161478, end=offset_end) 
gzipped_text = s3.get_object(Bucket='commoncrawl', Key=filename, Range=byte_range)['Body'].read() 

# The requested file in GZIP 
with open("file.gz", 'w') as f: 
    f.write(gzipped_text) 

...それがお役に立てば幸い! :)

+0

これはWARCアーカイブのオフセットを取得するのに便利ですが、私の元々の質問はWATファイルに対して同じことをすることでした... – jmtroos

関連する問題