我正在尝试从脚本中的谷歌驱动器下载文件,我在这方面遇到了一些麻烦.我正在尝试下载的文件在这里.
我在网上看了很多,我终于设法让其中一个下载了.我得到了文件的UID和较小的(1.6MB)下载,但较大的文件(3.7GB)总是重定向到一个页面,询问我是否要在没有病毒扫描的情况下继续下载.有人可以帮助我通过那个屏幕吗?
这是我如何使第一个文件工作 -
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz
当我在另一个文件上运行相同的时候,
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz
我得到以下输出 -
我注意到链接中的倒数第三行,&confirm=JwkK
其中有一个随机的4个字符串,但建议有一种方法可以向我的URL添加确认.我访问过的其中一个链接建议&confirm=no_antivirus
但是这不起作用.
我希望有人可以帮忙解决这个问题!
提前致谢.
您可以使用开源Linux/Unix命令行工具gdrive
.
要安装它:
下载二进制文件.例如,选择适合您的架构的那个gdrive-linux-x64
.
将其复制到您的路径.
sudo cp gdrive-linux-x64 /usr/local/bin/gdrive; sudo chmod a+x /usr/local/bin/gdrive;
要使用它:
确定Google云端硬盘文件ID.为此,右键单击Google云端硬盘网站中的所需文件,然后选择"获取链接...".它将返回类似的东西https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H
.获取后面的字符串?id=
并将其复制到剪贴板.那是文件的ID.
下载文件.当然,请在以下命令中使用您的文件ID.
gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
首次使用时,该工具需要获取Google Drive API的访问权限.为此,它会显示一个您必须在浏览器中访问的链接,然后您将获得一个验证码以复制并粘贴回该工具.然后下载自动开始.没有进度指示器,但您可以在文件管理器或第二个终端中观察进度.
资料来源: Tobi对另一个答案的评论.
其他技巧:速率限制.要gdrive
以有限的最大速率下载(不要淹没网络...),您可以使用这样的命令(pv
是PipeViewer):
gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \ pv -br -L 90k | \ cat > file.ext
这将显示下载的数据量(-b
)和下载速率(),并将该速率-r
限制为90 kiB/s(-L 90k
).
(如果您只需要一次性下载)
转到包含下载链接的Google云端硬盘网页
打开浏览器控制台并转到"网络"选项卡
单击下载链接
等待文件开始下载,找到相应的请求(应该是列表中的最后一个),然后你可以取消下载
右键单击请求,然后单击"复制为cURL"(或类似)
你应该得到类似的东西:
curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed
将它放在你的控制台中,添加> my-file-name.extension
到最后(否则它会将文件写入你的控制台),然后按回车:)
ggID='put_googleID_here' ggURL='https://drive.google.com/uc?export=download' filename="$(curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" | grep -o '="uc-name.*</span>' | sed 's/.*">//;s/<.a> .*//')" getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)" curl -Lb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" -o "${filename}"
它是如何工作的?
用curl获取cookie文件和html代码.
管道html到grep和sed并搜索文件名.
使用awk从cookie文件中获取确认代码.
最后下载启用了cookie的文件,确认代码和文件名.
curl -Lb /tmp/gcokie "https://drive.google.com/uc?export=download&confirm=Uq6r&id=0B5IRsLTwEO6CVXFURmpQZ1Jxc0U" -o "SomeBigFile.zip"
如果你不需要文件名变量curl可以猜它
-L跟着重定向
-O Remote-name
-J Remote-header-name
curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" >/dev/null getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)" curl -LOJb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}"
要从URL中提取Google文件ID,您可以使用:
echo "gURL" | egrep -o '(\w|-){26,}' # match more than 26 word characters
要么
echo "gURL" | sed 's/[^A-Za-z0-9_-]/\n/g' | sed -rn '/.{26}/p' # replace non-word characters with new line, # print only line with more than 26 word characters
截至2018年3月更新.
我尝试了在其他答案中给出的各种技术,将我的文件(6 GB)直接从Google驱动器下载到我的AWS ec2实例,但它们都不起作用(可能是因为它们已经老了).
因此,对于其他人的信息,以下是我成功的方法:
右键单击要下载的文件,单击"共享",在"链接共享"部分下,选择"具有此链接的任何人都可以编辑".
复制链接.它应该采用以下格式:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
从链接复制FILEIDENTIFIER部分.
将以下脚本复制到文件中.它使用curl并处理cookie以自动下载文件.
#!/bin/bash fileid="FILEIDENTIFIER" filename="FILENAME" curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
如上所示,将FILEIDENTIFIER粘贴到脚本中.记得保留双引号!
提供文件的名称以代替FILENAME.请记住保留双引号并在FILENAME中包含扩展名(例如,myfile.zip
).
现在,通过在终端中运行此命令来保存文件并使文件可执行sudo chmod +x download-gdrive.sh
.
使用`./download-gdrive.sh"运行脚本.
PS:这是上面给出的脚本的Github要点:https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424
- 更新 -
要下载文件,请先youtube-dl
从此处获取适用于python 的文件:
youtube-dl:https://rg3.github.io/youtube-dl/download.html
或安装pip
:
sudo python2.7 -m pip install --upgrade youtube_dl # or # sudo python3.6 -m pip install --upgrade youtube_dl
更新:
我刚发现:
右键单击要从drive.google.com下载的文件
请点击 Get Sharable link
开启 Link sharing on
点击 Sharing settings
单击顶部下拉列表中的选项
点击更多
选择 [x] On - Anyone with a link
复制链接
https://drive.google.com/file/d/3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR/view?usp=sharing (This is not a real file address)
在以下位置复制ID https://drive.google.com/file/d/
:
3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
将此粘贴到命令行中:
youtube-dl https://drive.google.com/open?id=
将ID粘贴到后面 open?id=
youtube-dl https://drive.google.com/open?id=3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
[GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Downloading webpage [GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Requesting source file [download] Destination: your_requested_filename_here-3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR [download] 240.37MiB at 2321.53MiB/s (00:01)
希望能帮助到你
我编写了一个Python代码段,可以从Google云端硬盘下载文件,并提供可共享的链接.它的工作原理截至2017年8月.
剪辑不使用gdrive,也不使用Google Drive API.它使用请求模块.
从Google云端硬盘下载大型文件时,单个GET请求是不够的.需要第二个,这个有一个名为confirm的额外URL参数,其值应该等于某个cookie的值.
import requests def download_file_from_google_drive(id, 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) 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) if __name__ == "__main__": import sys if len(sys.argv) is not 3: print("Usage: python google_drive.py drive_file_id destination_file_path") else: # TAKE ID FROM SHAREABLE LINK file_id = sys.argv[1] # DESTINATION FILE ON YOUR DISK destination = sys.argv[2] download_file_from_google_drive(file_id, destination)
2018年6月 最简单的方式对我有用
pip install gdown
gdown https://drive.google.com/uc?id=file_id
本file_id
应该是这个样子0Bz8a_Dbh9QhbNU3SGlFaDg
您可以通过右键单击文件然后获取可共享链接来获取它.在开放访问文件上测试.我不确定它是否适用于目录.在Google Colab上测试过.
我在Google云端硬盘上遇到了同样的问题.
这是我使用Links 2解决问题的方法.
在PC上打开浏览器,在Google云端硬盘中导航到您的文件.为您的文件提供公共链接.
将公共链接复制到剪贴板(例如右键单击,复制链接地址)
打开一个终端.如果你要下载到另一台PC /服务器/机器,你应该在这一点上SSH
安装链接2(debian/ubuntu方法,使用你的发行版或操作系统等效)
sudo apt-get install links2
将链接粘贴到您的终端并使用链接打开它,如下所示:
links2 "paste url here"
使用箭头键导航到链接中的下载链接,然后按 Enter
选择文件名,它将下载您的文件
根据Roshan Sethia的回答
2018年五月
使用WGET:
创建一个名为wgetgdrive.sh的shell脚本,如下所示:
#!/bin/bash # Get files from Google Drive # $1 = file ID # $2 = file name URL="https://docs.google.com/uc?export=download&id=$1" wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate $URL -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=$1" -O $2 && rm -rf /tmp/cookies.txt
授予执行脚本的正确权限
在终端中,运行:
./wgetgdrive.sh <file ID> <filename>
例如:
./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
看看这个问题:使用Google Drive API从Google云端硬盘直接下载
基本上你必须创建一个公共目录并通过相对引用来访问你的文件
wget https://googledrive.com/host/LARGEPUBLICFOLDERID/index4phlat.tar.gz
警告:不推荐使用此功能.请参阅评论中的以下警告.
或者,您可以使用以下脚本:https://github.com/circulosmeos/gdown.pl
使用youtube-dl!
youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890
您还可以通过--get-url
获取直接下载URL。
最简单的方法是:
创建下载链接并复制fileID
使用WGET下载: wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt
截至2016年12月,没有答案提出对我有用的内容(来源):
curl -L https://drive.google.com/uc?id={FileID}
如果Google Drive文件已与拥有该链接的人共享,并且{FileID}
是?id=
共享URL中的后面的字符串.
虽然我没有查看大文件,但我相信它可能有用.
这是一个快速的方法来做到这一点.
确保链接是共享的,它看起来像这样:
https://drive.google.com/open?id=FILEID&authuser=0
然后,复制该FILEID并像这样使用它
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
从Google驱动器下载文件的简单方法,您也可以在colab上下载文件
pip install gdown import gdown
然后
url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c' output = 'spam.txt' gdown.download(url, output, quiet=False)
要么
fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c' gdown https://drive.google.com/uc?id=+fileid
文件https://pypi.org/project/gdown/
谷歌驱动器的默认行为是扫描文件中的病毒,如果文件太大,它将提示用户并通知他无法扫描文件.
目前,我找到的唯一解决方法是与Web共享文件并创建Web资源.
从谷歌驱动器帮助页面引用:
使用Drive,您可以将Web资源(如HTML,CSS和Javascript文件)视为网站.
要托管带有云端硬盘的网页:
在drive.google.com上打开云端硬盘并选择一个文件.
单击页面顶部的" 共享"按钮.
单击共享框右下角的" 高级 ".
点击更改....
在Web上选择On - Public,然后单击Save.
在关闭共享框之前,请在"链接到共享"下方字段中的URL中复制文档ID.文档ID是一个由大写和小写字母组成的字符串,以及URL中斜杠之间的数字.
共享看起来像"www.googledrive.com/host/[doc id"的网址,其中[doc id]被您在步骤6中复制的文档ID替换.
任何人都可以查看您的网页.
在此处找到:https://support.google.com/drive/answer/2881970?hl = zh-CN
例如,当您公开在Google云端硬盘上共享文件时,sharelink看起来像这样:
https://drive.google.com/file/d/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U/view?usp=sharing
然后复制文件ID并创建一个googledrive.com linke,如下所示:
https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U