2011-09-21 3 views
-2

html 웹 사이트의 html 테이블에서 데이터를 긁어내는 것은 쉽고 간단합니다. 그러나 웹 사이트가 html로 작성되지 않고 관련 정보를 표시하는 브라우저가 필요한 경우 어떻게해야합니까? ASP 웹 사이트 또는 데이터가 코드에 없지만 Java 코드를 통해 제공되는 경우?R을 사용하여 비 html 웹 사이트 스크랩하기?

마찬가지로 여기에 있습니다 : http://www.bwea.com/ukwed/construction.asp.

Excel 용 VBA를 사용하면 IE 세션에서 웹 사이트를 열고 기본적으로 웹 사이트의 콘텐츠를 복사하여 붙여 넣을 수있는 기능을 작성할 수 있습니다. R과 비슷한 것을 할 수있는 기회는 무엇입니까?

+5

이 아직 전달되는 HTML입니다. – Thomas

+1

이 질문의 전제는 사실 기반이 아닙니다. 편집해야합니다. – adamleerich

답변

1

토마스가 언급 한대로이 사이트는 HTML 만 제공합니다. 일부 사이트에서는 JavaScript를 사용하여 AJAX 호출을 통해 값을 가져 와서 문서에 동적으로 삽입합니다. 간단한 스크래핑을 통해 작동하지 않습니다. 이러한 트릭은 자바 스크립트 디버거를 사용하여 AJAX 호출이 무엇인지 확인하고 요청 및 응답에서 리버스 엔지니어링하도록하는 것입니다.

가장 어려운 일은 Java 애플릿에 의해 구동되는 사이트이지만 감사하게도 이는 거의 없습니다. 이것들은 거의 모든 네트워크 메커니즘을 통해 데이터를 가져올 수 있으며, 네트워크 트래픽을 검사하여 리버스 엔지니어링해야합니다.

Java 애플릿이라면 IE/VBA도 실패합니다.

또한 자바와 자바 스크립트를 혼동하지 마십시오.

+0

나는 그가 ASP와 Java를 같은 문장으로 언급했을 때 Javascript가 아니라 JSP 나 Java Server Pages를 의미한다고 생각했다. – adamleerich

3

정상적인 HTML이며 데이터를 스크랩 한 후 정리해야하는 일반적인 문제가 있습니다.

  • 패키지 XML
  • 이 페이지에서 다섯 번째 테이블의에 readHTMLTable있는 페이지를 읽기 때문에 다섯 번째 요소
  • 를 추출 할 첫 번째 행을 가지고 할당 :

    다음은 트릭을 수행 테이블의 이름을

  • 는 첫 번째 행을 삭제

코드 :

x <- readHTMLTable("http://www.bwea.com/ukwed/construction.asp", 
        as.data.frame=TRUE, stringsAsFactors=FALSE) 
dat <- x[[5]] 
names(dat) <- unname(unlist(dat[1, ])) 

결과 데이터 : 정적 및 동적으로 생성 된 페이지 사이에 어떤 차이가 안보기의 클라이언트의 관점에서, 그래서

dat <- dat[-1, ] 

'data.frame': 39 obs. of 10 variables: 
$ Date    : chr "September 2011" "August 2011" "August 2011" "August 2011" ... 
$ Wind farm   : chr "Baillie Wind farm - Bardnaheigh Farm" "Mains of Hatton" "Coultas Farm" "White Mill (Coldham ext)" ... 
$ Location   : chr "Highland" "Aberdeenshire" "Nottinghamshire" "Cambridgeshire" ... 
$ Power(MW)   : chr "2.5" "0.8" "0.33" "2" ... 
$ Turbines   : chr "21" "3" "1" "7" ... 
$ MW Capacity   : chr "52.5" "2.4" "0.33" "14" ... 
$ Annual homes equiv*.: chr "29355" "1342" "185" "7828" ... 
$ Developer   : chr "Baillie" "Eco2" "" "COOP" ... 
$ Latitude   : chr "58 02 52N" "57 28 11N" "53 04 33N" "52 35 47N" ... 
$ Longitude   : chr "04 07 40W" "02 30 32W" "01 18 16W" "00 07 41E" ... 
관련 문제