Python: download files from google drive using url

前端 未结 9 1289
眼角桃花
眼角桃花 2020-11-27 11:51

I am trying to download files from google drive and all I have is the drive\'s URL.

I have read about google API that talks about some drive_service and

相关标签:
9条回答
  • 2020-11-27 12:24

    You can install https://pypi.org/project/googleDriveFileDownloader/

    pip install googleDriveFileDownloader

    And download the file, here is the sample code to download

    from googleDriveFileDownloader import googleDriveFileDownloader
    a = googleDriveFileDownloader()
    a.downloadFile("https://drive.google.com/uc?id=1O4x8rwGJAh8gRo8sjm0kuKFf6vCEm93G&export=download")
    
    0 讨论(0)
  • 2020-11-27 12:26

    Here's an easy way to do it with no third-party libraries and a service account.

    pip install google-api-core and google-api-python-client

    from googleapiclient.discovery import build
    from googleapiclient.http import MediaIoBaseDownload
    from google.oauth2 import service_account
    import io
    
    credz = {} #put json credentials her from service account or the like
    # More info: https://cloud.google.com/docs/authentication
    
    credentials = service_account.Credentials.from_service_account_info(credz)
    drive_service = build('drive', 'v3', credentials=credentials)
    
    file_id = '0BwwA4oUTeiV1UVNwOHItT0xfa2M'
    request = drive_service.files().get_media(fileId=file_id)
    #fh = io.BytesIO() # this can be used to keep in memory
    fh = io.FileIO('file.tar.gz', 'wb') # this can be used to write to disk
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print("Download %d%%." % int(status.progress() * 100))
    
    
    
    0 讨论(0)
  • 2020-11-27 12:27

    I recommend gdown package:

    import gdown
    
    url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c'
    output = 'spam.txt'
    gdown.download(url, output, quiet=False) 
    
    0 讨论(0)
  • 2020-11-27 12:32

    This has also been described above,

       from pydrive.auth import GoogleAuth
       gauth = GoogleAuth()
       gauth.LocalWebserverAuth()
       drive = GoogleDrive(gauth)
    

    This creates its own server too do the dirty work of authenticating

       file_obj = drive.CreateFile({'id': '<Put the file ID here>'})
       file_obj.GetContentFile('Demo.txt') 
    

    This downloads the file

    0 讨论(0)
  • 2020-11-27 12:33

    Generally speaking, a URL from a shared file from Google Drive looks like this

    https://drive.google.com/file/d/1HV6vf8pB-EYnjcJcH65eGZVMa2v2tcMh/view?usp=sharing
    

    where 1HV6vf8pB-EYnjcJcH65eGZVMa2v2tcMh corresponds to fileID.

    Hence, you can simply create a function to get the fileID from the URL, like this where url = https://drive.google.com/file/d/1HV6vf8pB-EYnjcJcH65eGZVMa2v2tcMh/view?usp=sharing,

    def url_to_id(url):
        x = url.split("/")
        return x[5]
    

    Printing x will give

    ['https:', '', 'drive.google.com', 'file', 'd', '1HV6vf8pB-EYnjcJcH65eGZVMa2v2tcMh', 'view?usp=sharing']
    

    And so, as we want to return the 6th array value, we use x[5].

    0 讨论(0)
  • 2020-11-27 12:34

    PyDrive allows you to download a file with the function GetContentFile(). You can find the function's documentation here.

    See example below:

    # Initialize GoogleDriveFile instance with file id.
    file_obj = drive.CreateFile({'id': '<your file ID here>'})
    file_obj.GetContentFile('cats.png') # Download file as 'cats.png'.
    

    This code assumes that you have an authenticated drive object, the docs on this can be found here and here.

    In the general case this is done like so:

    from pydrive.auth import GoogleAuth
    
    gauth = GoogleAuth()
    # Create local webserver which automatically handles authentication.
    gauth.LocalWebserverAuth()
    
    # Create GoogleDrive instance with authenticated GoogleAuth instance.
    drive = GoogleDrive(gauth)
    

    Info on silent authentication on a server can be found here and involves writing a settings.yaml (example: here) in which you save the authentication details.

    0 讨论(0)
提交回复
热议问题