Arj*_*jun 247 curl wget google-docs google-drive-api
我正在尝试从脚本中的谷歌驱动器下载文件,我在这方面遇到了一些麻烦.我正在尝试下载的文件在这里.
我在网上看了很多,我终于设法让其中一个下载了.我得到了文件的UID和较小的(1.6MB)下载,但较大的文件(3.7GB)总是重定向到一个页面,询问我是否要在没有病毒扫描的情况下继续下载.有人可以帮助我通过那个屏幕吗?
这是我如何使第一个文件工作 -
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
当我在另一个文件上运行相同的时候,
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz
Run Code Online (Sandbox Code Playgroud)
我注意到链接中的倒数第三行,&confirm=JwkK其中有一个随机的4个字符串,但建议有一种方法可以向我的URL添加确认.我访问过的其中一个链接建议&confirm=no_antivirus但是这不起作用.
我希望有人可以帮忙解决这个问题!
提前致谢.
tur*_*ula 175
我编写了一个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)
Run Code Online (Sandbox Code Playgroud)
phi*_*phi 134
2018年6月 最简单的方式对我有用
pip install gdown本file_id应该是这个样子0Bz8a_Dbh9QhbNU3SGlFaDg
您可以通过右键单击文件然后获取可共享链接来获取它.在开放访问文件上测试.我不确定它是否适用于目录.在Google Colab上测试过.
tan*_*ius 70
您可以使用开源Linux/Unix命令行工具gdrive.
要安装它:
下载二进制文件.例如,选择适合您的架构的那个gdrive-linux-x64.
将其复制到您的路径.
sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
sudo chmod a+x /usr/local/bin/gdrive;
Run Code Online (Sandbox Code Playgroud)要使用它:
确定Google云端硬盘文件ID.为此,右键单击Google云端硬盘网站中的所需文件,然后选择"获取链接...".它将返回类似的东西https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H.获取后面的字符串?id=并将其复制到剪贴板.那是文件的ID.
下载文件.当然,请在以下命令中使用您的文件ID.
gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
Run Code Online (Sandbox Code Playgroud)首次使用时,该工具需要获取Google Drive API的访问权限.为此,它会显示一个您必须在浏览器中访问的链接,然后您将获得一个验证码以复制并粘贴回该工具.然后下载自动开始.没有进度指示器,但您可以在文件管理器或第二个终端中观察进度.
其他技巧:速率限制.要gdrive以有限的最大速率下载(不要淹没网络...),您可以使用这样的命令(pv是PipeViewer):
gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
pv -br -L 90k | \
cat > file.ext
Run Code Online (Sandbox Code Playgroud)
这将显示下载的数据量(-b)和下载速率(),并将该速率-r限制为90 kiB/s(-L 90k).
小智 55
看看这个问题:使用Google Drive API从Google云端硬盘直接下载
基本上你必须创建一个公共目录并通过相对引用来访问你的文件
wget https://googledrive.com/host/LARGEPUBLICFOLDERID/index4phlat.tar.gz
Run Code Online (Sandbox Code Playgroud)
警告:不推荐使用此功能.请参阅评论中的以下警告.
或者,您可以使用以下脚本:https://github.com/circulosmeos/gdown.pl
Ben*_*ari 53
首先,从谷歌驱动器中提取您想要的文件的 ID:
接下来,gdown使用pip以下命令安装PyPI 模块:
pip install gdown
最后,使用gdown和预期的 ID下载文件:
gdown --id <put-the-ID>
[注意]:
!在bash命令之前使用。!gdown --id 1-1wAx7b-USG0eQwIBVwVDUl3K1_1ReCt)lap*_*npt 48
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}"
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
用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"
Run Code Online (Sandbox Code Playgroud)
如果你不需要文件名变量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}"
Run Code Online (Sandbox Code Playgroud)
要从URL中提取Google文件ID,您可以使用:
echo "gURL" | egrep -o '(\w|-){26,}'
# match more than 26 word characters
Run Code Online (Sandbox Code Playgroud)
要么
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
Run Code Online (Sandbox Code Playgroud)
Ami*_*har 33
截至2018年3月更新.
我尝试了在其他答案中给出的各种技术,将我的文件(6 GB)直接从Google驱动器下载到我的AWS ec2实例,但它们都不起作用(可能是因为它们已经老了).
因此,对于其他人的信息,以下是我成功的方法:
https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing将以下脚本复制到文件中.它使用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}
Run Code Online (Sandbox Code Playgroud)如上所示,将FILEIDENTIFIER粘贴到脚本中.记得保留双引号!
myfile.zip).sudo chmod +x download-gdrive.sh.PS:这是上面给出的脚本的Github要点:https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424
tho*_*iha 24
这是一个快速的方法来做到这一点.
确保链接是共享的,它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 23
谷歌驱动器的默认行为是扫描文件中的病毒,如果文件太大,它将提示用户并通知他无法扫描文件.
目前,我找到的唯一解决方法是与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
Run Code Online (Sandbox Code Playgroud)
然后复制文件ID并创建一个googledrive.com linke,如下所示:
https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U
Run Code Online (Sandbox Code Playgroud)
Kos*_*Kos 14
您可以使用此解决方案:
https://drive.google.com/uc?export=download&id=FILE_ID&confirm=t
“病毒扫描警告页面”来源:
“仍然下载”表单 POST 到相同的 URL,但带有额外的三个参数:
tconfirmuuid如果您更改原始 URL 并添加其中之一:confirm=t,它将下载文件而不会出现警告页面。
所以只需将您的网址更改为
https://drive.google.com/uc?export=download&id=FILE_ID&confirm=t
Run Code Online (Sandbox Code Playgroud)
例如:
$ curl -L 'https://drive.google.com/uc?export=download&id=FILE_ID' > large_video.mp4
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2263 0 2263 0 0 5426 0 --:--:-- --:--:-- --:--:-- 5453
Run Code Online (Sandbox Code Playgroud)
添加后confirm=t结果:
$ curl -L 'https://drive.google.com/uc?export=download&id=FILE_ID&confirm=t' > large_video.mp4
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 128M 100 128M 0 0 10.2M 0 0:00:12 0:00:12 --:--:-- 10.9M
Run Code Online (Sandbox Code Playgroud)
小智 12
(如果您只需要一次性下载)
你应该得到类似的东西:
curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed
Run Code Online (Sandbox Code Playgroud)
将它放在你的控制台中,添加> my-file-name.extension到最后(否则它会将文件写入你的控制台),然后按回车:)
小智 11
根据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
Run Code Online (Sandbox Code Playgroud)授予执行脚本的正确权限
在终端中,运行:
./wgetgdrive.sh <file ID> <filename>
Run Code Online (Sandbox Code Playgroud)
例如:
./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
Run Code Online (Sandbox Code Playgroud)- 更新 -
要下载文件,请先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
Run Code Online (Sandbox Code Playgroud)
更新:
我刚发现:
右键单击要从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)
Run Code Online (Sandbox Code Playgroud)
在以下位置复制ID https://drive.google.com/file/d/:
3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
Run Code Online (Sandbox Code Playgroud)
将此粘贴到命令行中:
youtube-dl https://drive.google.com/open?id=
Run Code Online (Sandbox Code Playgroud)
将ID粘贴到后面 open?id=
youtube-dl https://drive.google.com/open?id=3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
Run Code Online (Sandbox Code Playgroud)
[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)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
我一直在使用@Amit Chahar的 curl 片段,他在此线程中发布了一个很好的答案。我发现把它放在一个 bash 函数中而不是一个单独的.sh文件中很有用
function curl_gdrive {
GDRIVE_FILE_ID=$1
DEST_PATH=$2
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${GDRIVE_FILE_ID}" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${GDRIVE_FILE_ID}" -o ${DEST_PATH}
rm -f cookie
}
Run Code Online (Sandbox Code Playgroud)
可以包含在例如 a 中~/.bashrc(当然,如果不是自动采购,则在采购之后)并按以下方式使用
$ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar
Run Code Online (Sandbox Code Playgroud)
上述答案在 2020 年 4 月已过时,因为 google drive 现在使用重定向到文件的实际位置。
自 2020 年 4 月起在 macOS 10.15.4 上为公共文档工作:
# this is used for drive directly downloads
function download-google(){
echo "https://drive.google.com/uc?export=download&id=$1"
mkdir -p .tmp
curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
curl -L -b .tmp/$1cookies "$(egrep -o "https.+download" .tmp/$1intermezzo.html)" > $2;
}
# some files are shared using an indirect download
function download-google-2(){
echo "https://drive.google.com/uc?export=download&id=$1"
mkdir -p .tmp
curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
code=$(egrep -o "confirm=(.+)&id=" .tmp/$1intermezzo.html | cut -d"=" -f2 | cut -d"&" -f1)
curl -L -b .tmp/$1cookies "https://drive.google.com/uc?export=download&confirm=$code&id=$1" > $2;
}
# used like this
download-google <id> <name of item.extension>
Run Code Online (Sandbox Code Playgroud)
以上所有回答似乎都掩盖了答案的简单性,或者有一些未解释的细微差别。
如果文件是公开共享的,您只需知道文件 ID 即可生成直接下载链接。URL 的格式必须为“ https://drive.google.com/uc?id=[FILEID]&export=download ”,此格式自 2019 年 11 月 22 日起生效。这不需要接收者登录谷歌,但需要公开共享文件。
在浏览器中,导航到 drive.google.com。
右键单击该文件,然后单击“获取可共享链接”
编辑 URL,使其采用以下格式,将“[FILEID]”替换为您共享文件的 ID:
那是你的直接下载链接。如果您在浏览器中单击它,文件现在将被“推送”到您的浏览器,打开下载对话框,允许您保存或打开文件。您也可以在下载脚本中使用此链接。
所以等效的 curl 命令是:
curl -L "https://drive.google.com/uc?id=AgOATNfjpovfFrft9QYa-P1IeF9e7GWcH&export=download" > phlat-1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
截至2016年12月,没有答案提出对我有用的内容(来源):
curl -L https://drive.google.com/uc?id={FileID}
Run Code Online (Sandbox Code Playgroud)
如果Google Drive文件已与拥有该链接的人共享,并且{FileID}是?id=共享URL中的后面的字符串.
虽然我没有查看大文件,但我相信它可能有用.
方法是这样的:
FILEID="unique_google_drive_id"
FILENAME="output_filename"
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
Run Code Online (Sandbox Code Playgroud)
我在Google云端硬盘上遇到了同样的问题.
这是我使用Links 2解决问题的方法.
在PC上打开浏览器,在Google云端硬盘中导航到您的文件.为您的文件提供公共链接.
将公共链接复制到剪贴板(例如右键单击,复制链接地址)
打开一个终端.如果你要下载到另一台PC /服务器/机器,你应该在这一点上SSH
安装链接2(debian/ubuntu方法,使用你的发行版或操作系统等效)
sudo apt-get install links2
将链接粘贴到您的终端并使用链接打开它,如下所示:
links2 "paste url here"
使用箭头键导航到链接中的下载链接,然后按 Enter
选择文件名,它将下载您的文件
最简单的方法是:
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使用youtube-dl!
youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890
您还可以通过--get-url获取直接下载URL。
从Google驱动器下载文件的简单方法,您也可以在colab上下载文件
pip install gdown
import gdown
Run Code Online (Sandbox Code Playgroud)
然后
url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c'
output = 'spam.txt'
gdown.download(url, output, quiet=False)
Run Code Online (Sandbox Code Playgroud)
要么
fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'
gdown https://drive.google.com/uc?id=+fileid
Run Code Online (Sandbox Code Playgroud)
文件https://pypi.org/project/gdown/