【Py】webページの先頭数バイトだけ取得

各種データ収集の際、webページやデータファイルの先頭数バイトだけ欲しいときがたまに有ります。

そんな時には、Rangeヘッダを使うらしいです。
HTTP入門

以下 コード例


スクリプトを書いて 調べてみました。

opener = urllib2.build_opener()
opener.addheaders = [
    #これはお好みで
    #("User-agent",
    #   "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"), 


     #今回のキモ
    ("Range","bytes=0-1023"), 

    ]
uri="http://~~~取得したいページ~~~~"
op=opener.open(uri,timeout=30)
dat=op.read(1024)

for i in op.headers.headers :
    print i

op.close()
~~ あとはdatを好きにに料理~~

ネットワークの状態を表示させて受信データの量を調べてみると、
・Rangeヘッダ不使用だと(大きなファイルでも) 20kバイト
・Rangeヘッダを使った場合、およそ2kバイト

なので、データの転送量が10分の1に減ってるみたいです。

大きなファイルの場合、いきなり全部のデータが送られてくるわけではないのですが、転送量の最小サイズは送られてきてしまうので、Rangeヘッダで指定したほうが、若干、転送量が減る、みたいです。

ファイルを1000個ぐらいダウンロードすると若干サーバへの負荷が違ってくる、かも。

あと、今回調べたのはJPEG画像ファイルなど静的ファイルについて。
CGIやPHPなどの、動的コンテンツでは効果無い、かもです。(たぶん)

コメントを残す

メールアドレスが公開されることはありません。