javascript - 在给定 JavaScript 语句的情况下使用 R 下载文件

标签 javascript r csv web-scraping export-to-csv

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

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

最佳答案

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

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

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

Web 抓取中的另一种常见技术实质上是运行可由脚本语言自动执行的浏览器。有一个利用 Selenium 的 R 包可能能够做到这一点:

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

这里有一些相关(但不重复)的问题,例如:

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

关于javascript - 在给定 JavaScript 语句的情况下使用 R 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856884/

相关文章:

javascript - 获取数组 JavaScript 中 key 对值的最大数量

linux - 有没有办法可以将我的 USB 闪存驱动器或其他存储设备用作运行 R 或其他编程任务的 RAM?

r - 使用 R 的应用函数之一简化代码

sql - 在 postgres 中拆分列值

javascript - 如何将 CSV 文件的链接添加到使用 D3 生成的 SVG 元素?

javascript - 仅在 d3.js 条形图的 Y 轴上维护最高和最低值

javascript - 如果 Google 的主页如此之小,为什么源代码有数百行代码?

r - 在 R 中有效地打包和解包函数参数

mysql - 将 Excel CSV 导入 MySQL 关系数据库?

javascript - 如何根据递增的类名定义更改的 css 属性?