如何从网页读取HTML列表到R

时间:2017-02-15 20:23:45

标签: r web-scraping xml2

考虑一个包含4个或更多列表<li> html元素的网站。 例如,像这样的网站:https://www.cprd.com/bibliography/bibliography.html

使用xml2(或其他方法,但xml2和管道是首选),将列表提取到字符向量中的最佳方法是什么?

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

输出应该是网站上<li>列表的列表。 (每年有一个清单)

第一个清单应该有第一个项目等于&#39;评估葡萄糖降低药物的发起者之间的窜流偏倚:一项英国队列研究。 Ankarfeldt MZ,Thorsted BL,Groenwold RH,Adalsteinsson E,Ali MS,Klungel OH。 临床Epidemiol。 2017; 9:19-30&#39;

编辑:意见建议

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 个答案:

答案 0 :(得分:2)

使用rvest(比xml2略有提升):

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 = '')
  )

gsub负责取出特殊字符,如“新行”和“制表”