2014-02-24 1 views
0

안녕하십니까, 모두웹 사이트에서 채우기 데이터 추출; 위키 타운 웹 페이지

호주의 인구/거주 용 래스터 레이어를 찾고 있습니다. 나는 몇몇 무료 데이터 세트를 온라인으로 찾는 것을 시도했지만 유용한 formate에서 실제로 아무것도 찾을 수 없었다. 나는 위키 피 디아 (wikipedia)의 인구 데이터를 긁어 내고 내 자신의 래스터 레이어를 만드는 것이 흥미로울 것이라고 생각했다. 이를 위해 위키에서 정보를 얻으려고 시도했지만 html에 대해 알지 못해서 도움이되지 못했습니다.

아이디어는 wiki 페이지가있는 호주의 모든 마을 목록을 제공하고 적절한 데이터를 data.frame에 추출하는 것입니다.

웹 페이지 원본 데이터를 R로 가져올 수 있지만 원하는 특정 데이터를 추출하는 방법에 매달 렸습니다. 아래 코드는 내가 갇혀있는 곳을 보여줍니다. 어떤 도움이라도 정말 고맙게 여기거나 올바른 방향으로 힌트를줍니다.

정상적인 웹 페이지에서 원하는 정보가 멋진 표의 오른쪽에 있기 때문에 readHTMLTable()을 사용할 수 있다고 생각했습니다. 그러나이 함수를 사용할 때 오류가 발생합니다 (아래). 소스 정보를 가져올 때이 테이블을 지정할 수있는 방법이 있습니까?

죄송합니다.이 질문이별로 의미가 없으면 HTML 파일을 검색 할 때 내가 무엇을하고 있는지 전혀 알지 못합니다.

도움을 주셔서 감사합니다. 예를 들어

tabs <- readHTMLTable(res[1]) 
    Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"list"’ 

, 나는 HTML 물건에 다음과 같습니다 필요한 데이터의 일부 :

건배, 아담

require(RJSONIO) 
    loc.names <- data.frame(town = c('Sale', 'Bendigo'), state = c('Victoria', 'Victoria')) 
    u <- paste('http://en.wikipedia.org/wiki/', 
     sep = '', loc.names[,1], ',_', loc.names[,2]) 
    res <- lapply(u, function(x) htmlParse(x)) 

오류가 나는 readHTMLTable를 사용할 때. 내 질문은 내가 가지고있는 HTML 자료에서이 위치를 어떻게 지정 하는가이다.

/ <span class="geo">-38.100; 147.067 

title="Victoria (Australia)">Victoria</a>. It has a population (2011) of 13,186 
+0

res입니다. 그 요소에 액세스하려면'[['' – jdharrison

답변

1

res 당신은 그것의 요소에 액세스 할 수 res[[1]]보다는 res[1]를 사용할 필요가이 경우에 목록을 반환합니다. 이 요소에서 readHTMLTable을 사용하면 모든 테이블이 제공됩니다. 당신이 XPath의 익숙하지 않은 selectr 패키지에는 CSS 선택기를 사용할 수있는 경우 지리 정보와 테이블은

require(XML) 
lapply(sapply(res, getNodeSet, path = '//*[@class="infobox vcard"]') 
     , readHTMLTable) 

을 readHTMLTable하기 위해 별도로 다음을 통과 그냥이 테이블을 추출 할 수 있습니다 class = "infobox vcard"과 함께 테이블에 포함 된 아마 쉽게 .

require(selectr) 
> querySelectorAll(res[[1]], "table span .geo") 
[[1]] 
<span class="geo">-38.100; 147.067</span> 

[[2]] 
<span class="geo">-38.100; 147.067</span> 
+0

감사합니다. jdharrison이 잘 작동했습니다. – Adam

관련 문제