使用 R 下载文件,给出 JavaScript 语句

Posted

技术标签:

【中文标题】使用 R 下载文件,给出 JavaScript 语句【英文标题】:Download file with R given a JavaScript Statement 【发布时间】:2014-09-11 11:21:56 【问题描述】:

我想创建一个 R 脚本,其中包括从 http://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=zips 下载棒球运动员投影数据。在数据表右上角附近的网页上有一个将此数据导出到 .csv 的链接,但它似乎是一个 javascript 命令 (javascript:__doPostBack('ProjectionBoard1$cmdCSV','')。我熟悉使用 download.file() 使用 .csv 文件的链接,但不知道如何处理。

如何使用 R 提取这些数据?

【问题讨论】:

看来你可以直接点击“导出数据->保存”然后使用read.csv 谢谢,如果需要,我会这样做。我希望有一种方法可以让 R 直接下载文件。我希望在某些数据发生变化时定期运行脚本,并希望尽可能地自动化。 【参考方案1】:

我在尝试下载多个 .pdf 文件时遇到了类似的问题。我找到的解决方案如下:

[1]。获取所有.pdf 链接,比如这个:

link <- "http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/luiz-inacio-lula-da-silva/discursos/1o-mandato/2003/01-01-pronun-do-presidente-da-republica-luiz-inacio-lula-da-silva-na-sessao-solene-de-posse-no-cn.pdf" 

[2] 不使用download.file() 函数,而是使用browseURL(),如下所示:

browseURL(link, browser = getOption("browser"),
        encodeIfNeeded = FALSE)

[3] browseURL() 功能使您的浏览器打开文件,它可以自动将.pdf 保存在您计算机的下载目录中。如果您使用的是谷歌浏览器,您可以按照以下步骤操作:

https://www.computerhope.com/issues/ch001114.htm

【讨论】:

【参考方案2】:

下载不是一个可以使用download.file 轻松检索的简单响应。网页构造了一个带有一些存储网页状态的巨大参数的 FORM,然后将其(以及大量 cookie)传递给服务器以获取 CSV 响应。

要在 R(或任何其他编程语言)中完成这项工作,您需要构建响应,通常只能通过首先获取网页、抓取 FORM 参数(和 cookie),然后构建精确的 POST请求您单击链接时所做的。

这可能通过 RCurl 实现,如果您的浏览器可以从其开发人员工具中保存 POST 请求参数,那么有时会更容易,这样您就可以获取 RCurl 来读取它们。

网页抓取的另一种常见技术是运行一个可以通过脚本语言自动化的浏览器。有一个利用 Selenium 的 R 包可能能够做到这一点:

http://cran.r-project.org/web/packages/RSelenium/index.html

这里有一些相关的(但不重复的)Q,比如:

How to use R to download a zipped file from a SSL page that requires cookies

几年前的 R-help 帖子也有一些建议:

https://stat.ethz.ch/pipermail/r-help//2012-September/335769.html

【讨论】:

正如@Spacedman 所说,这是一个asp 表单,POST 很复杂。您也许可以使用Curl 复制它。你可以使用 Selenium,但这个过程稍微有点复杂,因为 Selenium 通常不用于下载文件,请参阅***.com/questions/21944016/…

以上是关于使用 R 下载文件,给出 JavaScript 语句的主要内容,如果未能解决你的问题,请参考以下文章

vue下载文件时,限制下载个数的提示语

R Shiny Pass 文件列表到 Javascript 下载器

使用r.js来打包模块化的javascript文件

如何在R中的循环中运行(更改)JavaScript文件?

R语言安装教程

如何使用python下载7z文件