Python: download files from google drive using url

前端 未结 9 1290
眼角桃花
眼角桃花 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:41

    If by "drive's url" you mean the shareable link of a file on Google Drive, then the following might help:

    import requests
    
    def download_file_from_google_drive(id, destination):
        URL = "https://docs.google.com/uc?export=download"
    
        session = requests.Session()
    
        response = session.get(URL, params = { 'id' : id }, stream = True)
        token = get_confirm_token(response)
    
        if token:
            params = { 'id' : id, 'confirm' : token }
            response = session.get(URL, params = params, stream = True)
    
        save_response_content(response, destination)    
    
    def get_confirm_token(response):
        for key, value in response.cookies.items():
            if key.startswith('download_warning'):
                return value
    
        return None
    
    def save_response_content(response, destination):
        CHUNK_SIZE = 32768
    
        with open(destination, "wb") as f:
            for chunk in response.iter_content(CHUNK_SIZE):
                if chunk: # filter out keep-alive new chunks
                    f.write(chunk)
    
    if __name__ == "__main__":
        file_id = 'TAKE ID FROM SHAREABLE LINK'
        destination = 'DESTINATION FILE ON YOUR DISK'
        download_file_from_google_drive(file_id, destination)
    

    The snipped does not use pydrive, nor the Google Drive SDK, though. It uses the requests module (which is, somehow, an alternative to urllib2).

    When downloading large files from Google Drive, a single GET request is not sufficient. A second one is needed - see wget/curl large file from google drive.

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

    Having had similar needs many times, I made an extra simple class GoogleDriveDownloader starting on the snippet from @user115202 above. You can find the source code here.

    You can also install it through pip:

    pip install googledrivedownloader
    

    Then usage is as simple as:

    from google_drive_downloader import GoogleDriveDownloader as gdd
    
    gdd.download_file_from_google_drive(file_id='1iytA1n2z4go3uVCwE__vIKouTKyIDjEq',
                                        dest_path='./data/mnist.zip',
                                        unzip=True)
    

    This snippet will download an archive shared in Google Drive. In this case 1iytA1n2z4go3uVCwE__vIKouTKyIDjEq is the id of the sharable link got from Google Drive.

    0 讨论(0)
  • 2020-11-27 12:44
    # Importing [PyDrive][1] OAuth
    from pydrive.auth import GoogleAuth
    
    def download_tracking_file_by_id(file_id, download_dir):
        gauth = GoogleAuth(settings_file='../settings.yaml')
        # Try to load saved client credentials
        gauth.LoadCredentialsFile("../credentials.json")
        if gauth.credentials is None:
            # Authenticate if they're not there
            gauth.LocalWebserverAuth()
        elif gauth.access_token_expired:
            # Refresh them if expired
            gauth.Refresh()
        else:
            # Initialize the saved creds
            gauth.Authorize()
        # Save the current credentials to a file
        gauth.SaveCredentialsFile("../credentials.json")
    
        drive = GoogleDrive(gauth)
    
        logger.debug("Trying to download file_id " + str(file_id))
        file6 = drive.CreateFile({'id': file_id})
        file6.GetContentFile(download_dir+'mapmob.zip')
        zipfile.ZipFile(download_dir + 'test.zip').extractall(UNZIP_DIR)
        tracking_data_location = download_dir + 'test.json'
        return tracking_data_location
    

    The above function downloads the file given the file_id to a specified downloads folder. Now the question remains, how to get the file_id? Simply split the url by id= to get the file_id.

    file_id = url.split("id=")[1]
    
    0 讨论(0)
提交回复
热议问题