#はじめに
GCP Cloud Datalab(Python3)で、requestsライブラリを利用してcsvを特定サイトから取得し、取得したデータをGoogle Cloud Storage(GCS)に格納するコードを説明します。
こんなユーザが対象です。
- ローカルでJupyterNotebookを使っていたが、クラウドでいつでもどこからでも利用したい
- WEBのデータ(csv)を簡単に取得してGCSへアップロードしたい
##環境
- Cloud Datalab(Python3)
##Cloud Datalabとは
「データの探索、分析、可視化と機械学習のための使いやすいインタラクティブなツール」で、実態はGCE上にあるJupyterNotebookです。ネットに繋がればいつでもどこからでもJupyterを利用可能なので大変便利です。
複数ユーザで共有したいNotebookがある場合は、--no-user-checkingオプションを入れて、connectすればOK。(詳細な起動方法は他サイトを参照)
datalab connect --no-user-checking <VM名>
Datalab上でのPythonコード詳細
まず、必要なライブラリ読み込みます。
import requests
import sys
import google.datalab.storage as storage
適宜、変数を定義します。
## バケットの定義、適宜変更
bucket_name = '<bucket name>' // バケット名
bucket_path = 'gs://' + bucket_name //バケットのPATH
bucket_dir = '<bucket directory>/' //GCSの保存先フォルダ名
access_url = 'https://<replace to site>/sample.csv' //ダウンロードしたいサイトのcsv
upload_filename = 'sample_upload.csv'
対象のURLからrequestsを利用して、ファイルを取得。response.contentにコンテンツが格納されます。typeはbytes。
## URLからダウンロードする
def download(url):
data = ""
response = requests.get(url)
#print(type(response.content))
## <class 'bytes'>
if response.status_code == 200:
data = response.content
return data
else:
print('download error')
exit()
return data
GCSにアップロードする関数は以下です。main関数(後述)で、
bucketインスタンスを作成しておき、コンテンツタイプを指定(必須)して、
write_streamにてアップロードします。参考サイトによると、uploadと、write_streamの二つが、datalabのstorageモジュールで利用可能なアップロード関数ですが、テキストコンテンツの場合は、write_streamを利用するようです。
## GCSにアップロードする
def upload_gcs(bucket, uploadObject, data):
upload_object = bucket.object(uploadObject)
upload_object.write_stream(data,content_type='text/csv')
mainは、以下です。決め打ちでアップロード時のファイル名を、sample_upload.csvにしていますが、利用環境に合わせ適宜、変更してください。
if __name__ == "__main__":
## アクセスする先のURL
url = access_url
## バケットインスタンスの作成
bucket = storage.Bucket(bucket_name)
## URLにGETアクセスした結果のコンテンツを取得
data = download(url)
if data != "":
## 正常に取得できたら、指定したGCS(かつ、uploadフォルダ配下)へアップロード。ファイル名も指定。
upload_gcs(bucket, bucket_dir + upload_filename, data)
print('Success!')
else:
print('not Success!')
参考サイト
*https://googledatalab.github.io/pydatalab/google.datalab.storage.html
*この記事に触発されて記事を書きました。→エンジニアは全員技術記事を書くことを習慣化した方がいいぞ
おわりに
エラー処理などは、簡単に記載しましたが、基本的な部分はこれで分かると思います。
アクセスするURLを変更・繰り返しをすることで複数サイトクローリングも、もちろんできます。
Datalabは、インターネットアクセスさえあればいつでも、どのPC環境でも利用できますし、もっと活用していきたいと思います。実際には複数ファイルをWebクロール、スクレイピングしてBigQueryへ入れてみましたので、別記事でまとめようと思います。