如何用R中的follow_link抓取这个链接?

时间:2017-10-18 00:20:45

标签: r web-scraping rvest

我正在学习如何使用R进行网络抓取。在这种情况下,我使用的是“rvest”包和一个名为follow_link的特定函数。

这个想法是获取具有多个链接的网页的信息。我希望我的代码能够输入这些链接并获取其中的表格。

这是代码:

library(rvest)
s <- html_session("http://fccee.uvigo.es/es/profesorado.html")
link <- c("Dereito Privado", "Economia Financieira e Contabilidade", "Matemáticas",
      "Estadística e Investigación Operativa", "Economía Aplicada", "Fundamentos da Análise Ec. e Hª e Institucións Económicas",
      "Informática", "Organización de Empresas e Marketing", "Socioloxía, Ciencia Política e da Administración e Filosofía")
n <- length(link) #number of pages
datos <- list()
for (i in 1:n){

    s <- s %>% follow_link(link[i])
    datos[[(i)]] <- s %>% html_nodes(".lista_fccee") %>% html_table()
    s <- s %>% back()}

问题在于我收到此错误:没有链接有文字'Matemáticas'。 我认为问题与文本重音标记有关,因为前两个链接没有问题。

这可能是一个非常基本的问题,但我没有找到有关此特定错误的任何信息。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

正如您所怀疑的那样,问题在于特殊字符(重音a)。您可以看到R如何使用以下代码查看链接名称:

library(rvest)
top_url = "http://fccee.uvigo.es/es/profesorado.html"
page = read_html(top_url)
links = page %>% html_nodes("a") %>% html_text()
links
#> ...
#> [44] "Matemáticas"
#> ...

这最终成为一个复杂的编码问题,我无法弄清楚如何处理。所以,相反,这是获取数据的另一种方法。

library(rvest)
top_url = "http://fccee.uvigo.es/es/profesorado.html"
page = read_html(top_url)
links = page %>% 
  html_nodes(".listado_fccee li a") %>% 
  html_attr("href")
datos <- list()
for(i in links){
  datos[[length(datos)+1]] <- i %>% 
  paste0("http://fccee.uvigo.es",.) %>%
  read_html() %>%
  html_nodes(".lista_fccee") %>% 
  html_table()
}

不是使用会话,而是在第一页中读取,从具有部门链接的div类listado_fccee中提取所有链接。然后,您可以像以前一样阅读每个链接并获取表格,并将它们添加到列表中。