2017-02-15 7 views
-2

4 개 이상의 목록 <li> html 요소가있는 웹 사이트를 생각해보십시오. 예를 들어 같은 웹 사이트 : https://www.cprd.com/bibliography/bibliography.html웹 페이지에서 HTML 목록을 읽는 방법 R

xml2 (또는 다른 접근하지만, xml2 및 배관 선호), 문자의 벡터로 목록을 추출하는 가장 좋은 방법은 무엇을 사용하십니까?

url <- 'https://www.cprd.com/bibliography/bibliography.html' 
library(xml2) 
page <- read_html(url) 

출력은 웹 사이트의 <li> 목록이어야합니다. (매년 한 가지 목록이 있습니다)

그리고 첫 번째 목록에는 '혈당 강하제의 시작 자 사이의 채널링 편향 평가 : 영국 코호트 연구'와 첫 번째 항목이 있어야합니다. Ankarfeldt MZ, Thorsted BL, Groenwold RH, Adalsteinsson E, Ali MS, Klungel OH. Clin Epidemiol. 2017, 9 : 19-30.

편집 : 코멘트

library(rvest) 
output<-page %>% html_nodes('ol') %>% lapply(html_nodes, 'li') %>% lapply(html_text, trim = TRUE) 
output[[1]][1] 

[1] "Assessment of channeling bias among initiators of glucose-lowering drugs: A UK cohort study. \r\n  Ankarfeldt MZ, Thorsted BL, Groenwold RH, Adalsteinsson E, Ali MS, Klungel OH. Clin Epidemiol. 2017;9:19㤼㸶30." 
+1

당신은 무엇인가 시도해 봤어? 어떤 문제가 발생 했습니까? – Jota

+0

이것을 위해 ['rvest'] (http://stat4701.github.io/edav/2015/04/02/rvest_tutorial/) 패키지를 사용해보십시오 :'library (rvest); read_html ('https://www.cprd.com/bibliography/bibliography.html') %> % html_nodes ('ol') %> % lapply (., function (x) html_nodes (x, 'li') %> % html_text())'. – Abdou

+1

@Abdou'lapply' (또는 상황이 복잡해질수록'purrr :: map'이 두 번 더 편리해진다) 코드를 두 번 더 쉽게 읽을 수 있습니다 :'h2 %> % html_nodes ('ol') % lapply (html_nodes, 'li') %> % lapply (html_text, trim = TRUE)'현명한, 그들은 거의 동일합니다. – alistaire

답변

1

rvest를 사용 제안 (즉, xml2에 비해 약간의 개선이다) : gsub는 '새로운 라인'과 '같은 특수 문자를 복용을 담당

library(rvest) 

url <- 'https://www.cprd.com/bibliography/bibliography.html' 

page <- read_html(url) %>% 
    html_nodes('ol') %>% 
    map(~html_nodes(.x, 'li') %>% 
     html_text() %>% 
     gsub(pattern = '\\t|\\r|\\n', replacement = '') 
) 

그건

도표화