R:下载Google Drive公共文件夹中的所有文件

3
我在尝试获取RAIS数据(一份巴西雇员注册数据集),这些数据是使用Google Drive公共文件夹共享的,地址如下: https://drive.google.com/folderview?id=0ByKsqUnItyBhZmNwaXpnNXBHMzQ&usp=sharing&tid=0ByKsqUnItyBhU2RmdUloTnJGRGM#list
数据分为每年一个文件夹,在每个文件夹中有一个州每个文件要下载。我想自动化下载过程,在R中,对于所有年份,如果不是至少在每个年份文件夹内部。已下载的文件名应遵循手动下载时出现的文件名。
我知道一点R,但不懂web编程或网络爬虫。到目前为止,这就是我得到的: 通过手动下载2012年的第一份文件,我可以看到浏览器用来下载的URL: https://drive.google.com/uc?id=0ByKsqUnItyBhS2RQdFJ2Q0RrN0k&export=download
因此,我认为文件ID是: 0ByKsqUnItyBhS2RQdFJ2Q0RrN0k。
在2012年的页面的html代码中搜索,我能够找到该ID及其关联的文件名:AC2012.7z。所有其他ID和文件名都在HTML代码的那部分中。因此,假设我可以正确下载文件,则至少可以将其泛化到其他文件。
在R中,我尝试使用以下代码下载文件:
url <- "https://drive.google.com/uc?id=0ByKsqUnItyBhS2RQdFJ2Q0RrN0k&export=download"
download.file(url,"AC2012.7z")
unzip("AC2012.7z")

它确实下载了,但当我尝试解压文件时(在R内部和手动使用7.zip),我遇到了错误。由于文件大小(3.412Kb)与手动下载的文件大小(3.399Kb)不匹配,因此在R中下载的文件肯定有问题。


http://thebiobucket.blogspot.ie/2014/03/download-all-documents-from-google.html - jdharrison
@jdharrison:谢谢。这里有点不同,因为主文件夹是公共的,而RGoogleDocs的文档没有提到这一点。但我会查看代码来确认。 - LucasMation
1
为什么不将整个文件夹复制到您自己的驱动器上,然后批量下载文件呢? - user3616725
@user3616725:不,我正在尝试将其包装在一个函数中,以便轻松下载和处理这些数据。因此,我不能假设用户拥有谷歌帐户。 - LucasMation
@LucasMation,你找到任何解决方案了吗? - Shashank
@Shashank,不需要了。(他们改用FTP服务器解决了我的问题) - LucasMation
1个回答

0

针对今天尝试解决这个问题的任何人,您可以使用 googledrive

library(googledrive)
ls_tibble <- googledrive::drive_ls(GOOGLE_DRIVE_URL_FOR_THE_TARGET_FOLDER)
for (file_id in ls_tibble$id) {
  googledrive::drive_download(as_id(file_id))
}

这将会 (1) 触发一个认证页面在你的浏览器中打开,以授权 Tidyverse 库使用 gargle 代表你的账户访问 Google Drive,并且 (2) 下载该 URL 中文件夹内的所有文件到当前 R 会话的工作目录。


我觉得有点不安,因为googledrive想要在我的Google驱动器上获得写入权限,只是为了让我下载一个公共文件。我运行以下代码,以便给它只读访问权限:googledrive::drive_auth(scopes = "https://www.googleapis.com/auth/drive.readonly", email="<youremail@gmail.com>") - Eli Holmes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接