2015-06-09 55 views
4

我目前正在嘗試從我使用rvest的url列表中刮取緯度/經度數據。每個網址都有一個內嵌的谷歌地圖和一個特定的位置,但是這些網址本身並不顯示該API正在使用的路徑。刮在rvest中的位置數據

當在頁面的源代碼看,我看到我之後的部分是在這裏:

<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" 
}); 

現在,如果我能先手具有經緯度(....)輸入行,我可以使用一些字符串解析操作來派生所有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查詢輸入,該輸入寫入頁面代碼(至少,給我的業餘眼睛似乎是)。

有沒有人有任何建議?

回答

3

這似乎工作:

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"