2017-10-26 18 views
0

HTML 웹 페이지에서 정보를 긁어 내려고했지만 직접 링크가 있지만 어떤 이유로 든 관련 텍스트를 볼 수 없습니다.Rvest로 HTML 스크랩하기 : 텍스트 없음

다음은 웹 페이지의 두 가지 예는 다음과 같습니다 나는 HTML을 읽은 후, 나는 페이지에서 페이지로 변경해야합니다 관련 텍스트에서 제외하고 모든 소스 코드 (왼쪽하고

http://151.12.58.148:8080/CPC/CPC.detail.html?A00002 http://151.12.58.148:8080/CPC/CPC.detail.html?A00003

).

예를 들어

는 첫 번째 링크이있는 페이지를 제공합니다

내 브라우저에서 그것을 검사 때와 같이, 코딩 1872

데이터 디 nascita :

<p y:role="datasubset" y:arg="DATA_NASCITA" class="smalltitle"> 
    <span class="celllabel">data di nascita</span> 
&nbsp; 
<span y:role="multivaluedcontent" y:arg="DATA_NASCITA">1872</span> 
     </p> 

그러나 내 코드로 읽을 때 :

link <- 'http://151.12.58.148:8080/CPC/CPC.detail.html?A00002' 
page <- read_html(link) 
write.table(as.character(page), "page.txt") 
나는에 관심이 있어요 정보의 조각은 1872없이

<p y:role=\"datasubset\" y:arg=\"NASCITA\" class=\"smalltitle\"> 
    <span class=\"celllabel\">luogo di nascita</span>  
<span y:role=\"multivaluedcontent\" y:arg=\"NASCITA\"></span> 
     </p> 

, (또한 :. 617,451,515,

와 내가 얻고 무엇을 확인하는 "페이지", 인쇄, 코드의 동일한 부분입니다   없이는 아무것도 표시하지 않습니다.)

나는 주위를 둘러 볼 수없는 것처럼 보입니다. 대단히 감사합니다!

+0

원하는 데이터가 없습니다. 로드시 동적으로 생성됩니다. – hrbrmstr

답변

0

조금 더 확장하려면 사이트의 HTML 코드가 여러 개의 자바 스크립트를로드 한 다음 문서가로드 된 후 채워지는 템플릿을 가지며 쿼리 매개 변수를 계산할 값 유형으로 사용합니다. 그냥 대상 자바 스크립트 파일을 읽고 시도하고 V8 함께 구문 있지만 너무 많은 외부 종속성이 있습니다.

이 내용을 읽으려면 splashr 또는 seleniumPipes과 같은 것을 사용해야합니다. 내가 그것을 쓴 것처럼 나는 전적으로 부분적이다.

중 하나를 사용하려면 외부 프로그램을 실행해야합니다. 이 답변에는 Splash 또는 Selenium을 설치하는 방법에 대해 설명하지 않겠습니다. 그것은 당신이해야 할 다리 작업이지만 splashr은 Docker에 익숙하다면 Splash를 사용하기가 매우 쉽습니다.

library(rvest) 
library(splashr) 
library(purrr) 

start_splash() 

이 다음 비트는 페이지를 렌더링 &를 가져 스플래쉬을 알려줍니다 도커 시스템에서 사용할 수있는 경우

이 비트가 필요한 패키지를 설정하고 스플래쉬 서버를 시작합니다 (먼저 그것을 자동으로 다운로드합니다 .

splash_local %>% 
    splash_response_body(TRUE) %>% 
    splash_user_agent(ua_macos_chrome) %>% 
    splash_go("http://151.12.58.148:8080/CPC/CPC.detail.html?A00002") %>% 
    splash_wait(2) %>% 
    splash_html() -> pg 

불행하게도, 그것은 여전히 ​​엉망 그들은 네임 스페이스를 사용하고는 XML의 문서에 미세하지만 그들은 여기를 사용했던 방법으로 어느 정도 문제가있다 : 다음 자바 스크립트 후 페이지 내용이 작업을 수행 한 검색합니다.그러나 우리는 약간의 영리의 XPath와 그 해결 할 수

html_nodes(pg, "body") %>% 
    html_nodes(xpath=".//*[local-name()='h4' or local-name()='p' or local-name()='span']/text()") %>% 
    html_text(trim=TRUE) %>% 
    discard(`==`, "") 
## [1] "Abachisti Vittorio"      "data di nascita"       "1872"          
## [4] "luogo di nascita"       "Mirandola, Modena, Emilia Romagna, Italia" "luogo di residenza"      
## [7] "Mirandola, Modena, Emilia Romagna, Italia" "colore politico"       "socialista"        
## [10] "condizione/mestiere/professione"   "falegname"         "annotazioni riportate sul fascicolo"  
## [13] "radiato"         "Unità archivistica"      "busta"          
## [16] "1"           "estremi cronologici"      "1905-1942"         
## [19] "nel fascicolo è presente"     "scheda biografica"       "A00002"         

는이 작업을 수행하면 실행중인 모든 도커 컨테이너를 제거 스플래쉬/splashr를 다 마친 후 :

실제 HTML 소스 않기 때문에이다
killall_splash() 
+0

대단히 고맙습니다. 셀레늄을 사용해 봤지만 스플래시를 들여다 볼 것입니다! –