1.GCPの永久無料枠などで安価に継続的なデータ取得ができる
GCP(Google Cloud Platform)には最初の3か月間利用できる無料枠のほかにリージョンやリソースに制限があるとはいえ、永久的に無料でサーバーを利用することができます。
Google Compute Engine
1 f1-micro インスタンス(バージニア州北部 [us-east4] を除く米国リージョンのみ)
30 GB の HDD(期間合計)、5 GB のスナップショット(期間合計)
1 GB の北米から全リージョン宛ての下りネットワーク(中国とオーストラリアを除く)
Google Cloud Storage
5 GB の Regional Storage(バージニア州北部 [us-east4] を除く米国リージョンのみ)
5,000 回のクラス A オペレーション
50,000 回のクラス B オペレーション
1 GB の北米から全リージョン宛ての下りネットワーク
この他にも利用できるサービスがありますが、今回はPythonを使ってスクレイピングしてクラウドストレージにデータを蓄積することを目的としてみたいと思います。
*上記にあるようにネットワークの利用に1GBの制限があるため完全無料にはならない可能性があるのことには注意が必要です。
2.PythonでGCEからGCSを操作するには
*GCE,GCSそれぞれのインスタンスが既に作成されていることを前提とします。
まず、GCE(Ubuntuなど)のインスタンス上でPython向けのライブラリをインストールします。
$ pip install --upgrade google-cloud-storage
2-1. GCSを操作するためのライブラリをインポート
ここはすべての操作をする際に必要です。
from google.cloud import storage
client = storage.Client()
bucket_name="test_bucket"
bucket = client.get_bucket(bucket_name)
2-2. バケット内のオブジェクトの操作方法
2-2-1. オブジェクト一覧取得
for blob in client.list_blobs(bucket_name):
print(blob.name)
2-2-2. オブジェクトのインスタンス作成
blob = bucket.blob("sample.txt")
2-2-3. オブジェクトのダウンロード
blob.download_to_filename("sample1.txt")
2-2-4. オブジェクトのアップロード
GCEはデフォルトでストレージへのアクセスは読み取りのみとなっているので、インスタンスを立ち上げる前にストレージへの書き込みについてもアクセス権を与えてあげましょう。
blob.upload_from_filename("sample2.txt")
3. 例
GCEにあるデータをGCSにアップロードするにはこのようになります。
from google.cloud import storage
client = storage.Client()
source="test.txt"
bucket_name = "test-bucket"
bucket=client.get_buket(bucket_name)#bucketのオブジェクトを取得
blob = bucket.blob(source)#オブジェクトのインスタンスを作成
blob.upload_from_filename(source)#ダウンロード