在 rvest 中抓取位置数据

Scraping location data in rvest

我目前正在尝试从我使用 rvest 的网址列表中抓取 latitude/longitude 数据。每个 URL 都有一个带有特定位置的嵌入式 google 地图,但 url 本身并不显示 API 所采用的路径。

查看页面源代码时,我看到我要找的部分在这里:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(43.805170,-70.722084);
var myOptions = {
  zoom: 16,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.SATELLITE
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var marker = new google.maps.Marker({
    position: myLatlng, 
    map: map,
    title:"F.E. Wood & Sons - Natural Energy"
});   

现在,如果我能得到具有 LatLng(....) 输入的行,我就可以使用一些字符串解析操作来导出所有 URL 的纬度和经度值.

我编写了以下代码来获取我的数据:

require(rvest)
require(magrittr)
fetchLatLong<-function(url){
  url<-as.character(url)
  solNum<-html(url)%>%
    html_nodes("#map_canvas")%>%
    html_attr("script")
}

("map_canvas" 选择器是使用 selectorGadget 找到的;您可以查看整个源代码 here)。

我正在经历最糟糕的时光来阅读我想要的东西。我尝试了许多节点和节点组合,但无济于事。我玩过 phantom.js,但问题是它不是 js 渲染的 html 内容 我正在寻找:我正在寻找 API 查询输入,它被写成进入页面代码(或者,至少,在我的业余眼中似乎是)。

有人有什么建议吗?

这似乎有效:

library(rvest)
library(magrittr)
library(stringr)

pg <- html("http://biomassmagazine.com/plants/view/2285")

pg %>% 
  html_nodes("div.pad20 > script") %>% 
  extract2(2) %>% 
  html_text %>% 
  str_match_all("LatLng\(([[:digit:]\.\-]+),([[:digit:]\.\-]+)") %>% 
  extract2(1) %>% 
  extract(2:3) -> lat_lng

lat_lng

## [1] "43.805170"  "-70.722084"