Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What are the problem?

DriveのURLからデータを直接ダウンロード(+ Google Colaboratory)

2021/7/12追記
* gdownを用いてより簡単にダウンロードする手順を追記しました。

初めに

以下この記事の流れです。
1. Google Driveの共有リンクから直接ダウンロードを可能にする
2. pythonまたはwget,curl(CLI上)で先ほどのURLを用いてデータをダウンロード
3. Google Coloaboratoryでの実行する際の注意点

Google Driveの共有リンクで直接ダウンロード

Google Driveでファイル共有リンクを作成すると以下のようなページに飛び手動でダウンロードする手間がある。
スクリーンショット 2020-03-02 22.13.21.png

そこでURLをクリックして直接ダウンロードを行えるようにURLを変換する。URL変換ツールなどが存在するが、URLを以下のように書き換えるだけでURLから直接ダウンロードが可能になる。

file/d->uc?id=oruc?export=download&id=
/view?usp=sharing->

https://drive.google.com/file/d/<file_id>/view?usp=sharing
↓
https://drive.google.com/uc?id=<file_id>
or
https://drive.google.com/uc?export=download&id=<file_id>

Python or Shellでダウンロード

先ほど変換したURLを指定しurlretrieveや、wget,curlでダウンロードをするコード

Python

import urllib.request
import sys
url = "https://drive.google.com/uc?export=download&id=<file_id>"
file_name = "file_name"
urllib.request.urlretrieve(url, file_name)

Shell

wget "https://drive.google.com/uc?export=download&id=<FILE_ID>" -O <FILE_NAME>
or
curl "https://drive.google.com/uc?export=download&id=<FILE_ID>" -O <FILE_NAME>

大きいファイルの場合

以下のようにファイルサイズが大きすぎる場合ウィルススキャンが行われないため、ダウンロードをする際に確認がはいってしまい、先ほどのコードを実行すると確認ページ自体のhtmlファイルがダウンロードされてしまう。
スクリーンショット 2020-03-02 22.24.46.png

それを避けるためにconfirm用のcodeを取得する必要がある。以下のコードで取得できる。

curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=<FILE_ID>" > /dev/null
CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"  
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=<FILE_ID>" -o <FILE_NAME>

最も簡単な方法

gdown(OSS)を用いる。
gdownでは認証は用いられていないので、URLを共有状態にしてからダウンロードする必要がある。codeを取得するスクリプトを書く必要がないので楽。

!gdown https://drive.google.com/uc?id=<file_id>

Google Coloboratory上での実行

先ほどのコードをセルで実行するだけだが、以下のように行頭に!を付け加えるだけでは変数が保存されない。なので、セルの頭に%%shellを記述することでshell scriptのように実行できる。
スクリーンショット 2020-03-02 22.58.24.png

先ほどのコードの頭に%%shellを追加する

スクリーンショット 2020-03-02 23.02.20.png

unzipなど

スクリーンショット 2020-03-02 23.33.13.png

最後に

google driveの容量に制限がある方はcolab上で完結できる点や、githubには大量のデータを置くことができないのでGoogleColaboratoryのノートブックファイルなど共有する際にあらかじめ記述して置くことで、cloneしてセルを実行するだけで済むという利点はあるかなぁと思いました。

参考&引用

curlやwgetで公開済みGoogle Driveデータをダウンロードする
PythonでWeb上のファイルをダウンロードする
gdown

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
16
Help us understand the problem. What are the problem?