我想在下面的网站上下载一个与图表对应的csv数据文件。
如果我点击图表右上方的菜单按钮,有一个选项可以将图表数据下载到csv中。
问题是那个按钮似乎生成了一个只能暂时使用的下载链接,所以我无法使用常规的下载器,如read_csv或rio::import将文件拉到R中。
似乎图表和下载链接都是由Highcharts javascript生成的。
有没有什么直接的方法可以通过弄清楚链接把这些数据下载到R中?
还是必须要用刮刮乐练习?
如果你在屏幕上右击并按 "检查元素",然后进入 "网络 "选项卡,你可以看到正在进行xhr请求以获取数据(例如,在点击不同图表时)。
你注意到你对以下结果感兴趣。http:/vixcentral.comajax_update?_=1590762673737。.这个URL结尾的数字是 Unix时代 的当前时间。这就是为什么它会改变。
有一点来自搜刮的安全感,他们会尽量阻止不是来自自己网站的请求。通过设置头 X-Requested-With
到 "XMLHttpRequest"
,它的工作。你可以在浏览器的'检查元素'界面中点击它,查看这个请求使用的头文件。有一堆头文件被设置,通过删除每一个头文件并测试,我发现这是你的目的所需要的唯一一个头文件。
下面读取数据,并将其解析成R对象,用 jsonlite
.
res <- httr::GET("http://vixcentral.com/ajax_update/?_=1590762673737",
add_headers("X-Requested-With" = "XMLHttpRequest"))
res_text <- content(res, "text")
jsonlite::fromJSON(res_text)