【发布时间】:2017-10-19 19:19:21
【问题描述】:
我正在抓取以下网站:https://www.banorte.com/wps/portal/ixe/Home/indicadores/tipo-de-cambio
我正在尝试通过 rvest 包将货币汇率表放入 R 数据框中,但该表本身是在 HTML 代码中的 JavaScript 变量中配置的。
我找到了相关的 CSS 选择器,现在我有了这个:
library(rvest)
banorte <- "https://www.banorte.com/wps/portal/ixe/Home/indicadores/tipo-de-cambio/" %>%
read_html() %>%
html_nodes('#indicadores_financieros_wrapper > script:nth-child(2)')
我的输出现在是以下 JavaScript 脚本,作为 XML 节点集:
<script>
$(document).ready(function(){
var valor = '{"tablaDivisas":[{"nombreDivisas":"FRANCO SUIZO","compra":"18.60","venta":"19.45"}, {"nombreDivisas":"LIBRA ESTERLINA","compra":"24.20","venta":"25.15"}, {"nombreDivisas":"YEN JAPONES","compra":"0.1635","venta":"0.171"}, {"nombreDivisas":"CORONA SUECA","compra":"2.15","venta":"2.45"}, {"nombreDivisas":"DOLAR CANADA","compra":"14.50","venta":"15.35"}, {"nombreDivisas":"EURO","compra":"21.75","venta":"22.60"}], "tablaDolar":[{"nombreDolar":"VENTANILLA","compra":"17.73","venta":"19.15"}]}';
if(valor != '{}'){
var objJSON = eval("(" + valor + ")");
var tabla="<tbody>";
for ( var i = 0; i < objJSON["tablaDolar"].length; i++) {
tabla+= "<tr>";
tabla+= "<td>" + objJSON["tablaDolar"][i].nombreDolar + "</td>";
tabla+= "<td>$" + objJSON["tablaDolar"][i].compra + "</td>";
tabla+= "<td>$" + objJSON["tablaDolar"][i].venta + "</td>";
tabla+= "</tr>";
}
tabla+= "</tbody>";
$("#tablaDolar").append(tabla);
var tabla2="";
for ( var i = 0; i < objJSON["tablaDivisas"].length; i++) {
tabla2+= "<tr>";
tabla2+= "<td>" + objJSON["tablaDivisas"][i].nombreDivisas + "</td>";
tabla2+= "<td>$" + objJSON["tablaDivisas"][i].compra + "</td>";
tabla2+= "<td>$" + objJSON["tablaDivisas"][i].venta + "</td>";
tabla2+= "</tr>";
}
tabla2+= "</tbody>";
$("#tablaDivisas").append(tabla2);
}
bmnIndicadoresResponsivoInstance.cloneResponsive(0);
});
</script>
我的问题是,如何删除几乎所有内容(所有 JavaScript 函数/运算符)以仅获取此数据,并最终将其转换为 JSON 表,如下所示:
{"tablaDivisas":[{"nombreDivisas":"FRANCO SUIZO","compra":"18.60","venta":"19.45"},
{"nombreDivisas":"LIBRA ESTERLINA","compra":"24.20","venta":"25.15"},
{"nombreDivisas":"YEN JAPONES","compra":"0.1635","venta":"0.171"},
{"nombreDivisas":"CORONA SUECA","compra":"2.15","venta":"2.45"},
{"nombreDivisas":"DOLAR CANADA","compra":"14.50","venta":"15.35"},
{"nombreDivisas":"EURO","compra":"21.75","venta":"22.60"}],
"tablaDolar":[{"nombreDolar":"VENTANILLA","compra":"17.73","venta":"19.15"}]}
换句话说,我需要使用 R 从 JS 脚本中提取“valor”变量。
由于某种原因,我无法在 R 中完成这一切(无需将变量导出为外部 .txt 文件,然后使用子字符串)
【问题讨论】: