2014-03-05 33 views
3

我試圖從本網站刮材料:http://www.appliedsolutions.org/site/308/Local-Government/Local-Government-Affiliates解析網頁,並轉換爲data.frame

具體我感興趣的提取,圍繞網頁源代碼的598線路中可能出現的JavaScript值:

{ 
      "title": 'Coconino County', 
      "lat": '35.7714', 
      "lng": '-111.5111', 
      "description": 'Coconino County, AZ <br/> <a href="http://www.coconino.az.gov/" target="_blank"> http://www.coconino.az.gov/</a> <br/> ' 
     } 

    , 

     { 
      "title": 'City of Flagstaff', 
      "lat": '35.1981', 
      "lng": '-111.6506', 
      "description": 'City of Flagstaff, AZ <br/> <a href="http://www.flagstaff.az.gov/ " target="_blank"> http://www.flagstaff.az.gov/ </a> <br/> ' 
     } 

理想情況下,我想將「title」,「lat」和「lng」值帶入R data.frame

我已經使用R中的readLines函數來讀取頁面,但是在減少html以隔離我需要的數據時遇到了問題。

回答

5

這是使用RSelenium包的一種方法。

## Get RSelenium going and navigate to page, retrieve source 
require(RSelenium) 
RSelenium::checkForServer() 
RSelenium::startServer() 
remDr <- remoteDriver() 
remDr$open() 
remDr$setImplicitWaitTimeout(3000) 
remDr$navigate("http://www.appliedsolutions.org/site/308/Local-Government/Local-Government-Affiliates") 

編輯:這是更簡單直接調用`AppData的<每@jdharrison建議

appData <- remDr$executeScript("return markers;") 

dat <- do.call(rbind.data.frame, appData) 
dat <- dat[,c("title","lat","lng")] 

> head(dat) 
     lat  lng    title 
    35.7714 -111.5111  Coconino County 
    35.1981 -111.6506 City of Flagstaff 
    34.8697 -111.7603  City of Sedona 
    34.6503 -112.4147  Yavapai County 
    32.64 -117.0833 City of Chula Vista 
    38.8056 -123.0161 City of Cloverdale 
+2

後您導航到該頁面你可以得到的數據 - remDr $ executeScript(「迴歸標記;「)' – jdharrison

+2

appData將包含所有數據作爲列表。 'do.call(rbind.data.frame,appData)'會很快得到一個數據幀,但是我沒有數據專家,所以最好問一個更好的轉換列表的方法。 – jdharrison

+2

這很酷。我正在嘗試使用'XML'和'selectr'包來做這件事,但'markers'不是有效的JSON,所以沒有解析。我相信'RSelenium'直接讀取JS變量。 – Ramnath