2017-08-28 86 views
1

我想從Amazon S3下載WAT歸檔文件段的子集。從Common Crawl索引服務器獲取WAT歸檔文件子集的偏移量和長度

背景:

在搜索在http://index.commoncrawl.org產量約的WARC文件上AWS S3的位置信息的結果共同抓取索引。例如,搜索url=www.celebuzz.com/2017-01-04/*&output=json得到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文件。這個檔案文件是巨大的;但幸運的是,條目還包含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

許多試驗和錯誤之後,我曾設法從WARC文件範圍在Python和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