Search code examples
rrvest

How to use rvest in R to extract a dataframe considering the example HTML page?


I have this: html

Below, a small representation of the available link:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Busca Textual - Currículo Lattes</title>
                                <div class="resultado">
                                    <ol type="1" start="1">
                                        <li><div class="relevancia tooltip" alt="Score: indicador da freqüência relativa dos termos de busca sobre o(s) currículo(s) encontrados."><div class="barra"><div style="width:100%"></div></div><div class="porcentagem" style="font-size:9px; font-weight:normal">100%</div></div><b><a href="javascript:abreDetalhe(&#39;K4247104P1&#39;,&#39;Beatriz_Castro_Dias_Cuyabano&#39;,11678670,)">Beatriz Castro Dias Cuyabano</a></b>&nbsp;<br>Doutorado em Quantitative Genetics and Biostatistics pela Aarhus University, Dinamarca(2014)<br>Pesquisadora do Institut National de la Recherche Agronomique , França<br><br></li>
<li><div class="relevancia tooltip" alt="Score: indicador da freqüência relativa dos termos de busca sobre o(s) currículo(s) encontrados."><div class="barra"><div style="width:99%"></div></div><div class="porcentagem" style="font-size:9px; font-weight:normal">99%</div></div><b><a href="javascript:abreDetalhe(&#39;K4440769J3&#39;,&#39;Fernando_Domingues_Kümmel_Tria&#39;,35889969,)">Fernando Domingues Kümmel Tria</a></b>&nbsp;<br>Doutorado em Evolução molecular pelo Christian-Albrechts-Universität zu Kiel, Alemanha(2018)<br><br></li>
<li><div class="relevancia tooltip" alt="Score: indicador da freqüência relativa dos termos de busca sobre o(s) currículo(s) encontrados."><div class="barra"><div style="width:99%"></div></div><div class="porcentagem" style="font-size:9px; font-weight:normal">99%</div></div><b><a href="javascript:abreDetalhe(&#39;K4437977A8&#39;,&#39;Isadora_Alonso_Correa&#39;,29437672,)">Isadora Alonso Correa</a></b>&nbsp;<br><span class="tooltip coautor" alt="Pesquisador com bolsa de desenvolvimento tecnológico e industrial vigente no CNPq">Bolsista de Desenvolvimento Tecnológico Industrial A</span><br>Doutorado em Ciências (Microbiologia) pela Universidade Federal do Rio de Janeiro, Brasil(2020)<br>Aluno mestrado da Universidade Federal do Rio de Janeiro , Brasil<br><br></li>
<li><div class="relevancia tooltip" alt="Score: indicador da freqüência relativa dos termos de busca sobre o(s) currículo(s) encontrados."><div class="barra"><div style="width:99%"></div></div><div class="porcentagem" style="font-size:9px; font-weight:normal">99%</div></div><b><a href="javascript:abreDetalhe(&#39;K4275806J6&#39;,&#39;Yuri_Tani_Utsunomiya&#39;,19925978,)">Yuri Tani Utsunomiya</a></b>&nbsp;<br>Doutorado em Medicina Veterinária (Reprodução Animal) pela Universidade Estadual Paulista Júlio de Mesquita Filho, FCAV-Jaboticabal, Brasil(2017)<br>Jovem Docente Permanente, FMVA-UNESP da Universidade Estadual Paulista Júlio de Mesquita Filho , Brasil<br><br></li>
</ol></div>
</body></html>

Html view:

100%
Beatriz Castro Dias Cuyabano 
Doutorado em Quantitative Genetics and Biostatistics pela Aarhus University, Dinamarca(2014)
Pesquisadora do Institut National de la Recherche Agronomique , França

99%
Fernando Domingues Kümmel Tria 
Doutorado em Evolução molecular pelo Christian-Albrechts-Universität zu Kiel, Alemanha(2018)

99%
Isadora Alonso Correa 
Bolsista de Desenvolvimento Tecnológico Industrial A
Doutorado em Ciências (Microbiologia) pela Universidade Federal do Rio de Janeiro, Brasil(2020)
Aluno mestrado da Universidade Federal do Rio de Janeiro , Brasil

99%
Yuri Tani Utsunomiya 
Doutorado em Medicina Veterinária (Reprodução Animal) pela Universidade Estadual Paulista Júlio de Mesquita Filho, FCAV-Jaboticabal, Brasil(2017)
Jovem Docente Permanente, FMVA-UNESP da Universidade Estadual Paulista Júlio de Mesquita Filho , Brasil

How to create a dataframe a with the following structure in R:

# name CAPES graduation inf1 country.Grad year inf2 inf3 country
1 Beatriz Castro Dias Cuyabano NA Doutorado em Quantitative Genetics and Biostatistics pela Aarhus University NA Dinamarca 2014 NA Pesquisadora do Institut National de la Recherche Agronomique França
2 Fernando Domingues Kümmel Tria NA Doutorado em Evolução molecular pelo Christian-Albrechts-Universität zu Kiel NA Alemanha 2018 NA NA NA
3 Isadora Alonso Correa Bolsista de Desenvolvimento Tecnológico Industrial A Doutorado em Ciências (Microbiologia) pela Universidade Federal do Rio de Janeiro NA Brasil 2020 NA Aluno mestrado da Universidade Federal do Rio de Janeiro Brasil
4 Yuri Tani Utsunomiya NA Doutorado em Medicina Veterinária (Reprodução Animal) pela Universidade Estadual Paulista Júlio de Mesquita Filho FCAV-Jaboticabal Brasil 2017 Jovem Docente Permanente FMVA-UNESP da Universidade Estadual Paulista Júlio de Mesquita Filho Brasil
... ... ... ... ... ... ... ... ... ...
info <- html %>% 
    html_nodes(xpath = '/html/body/div/ol') %>%
    html_elements(.,"li")%>% data.frame()

I'm using this code, but without success. how to make this dataframe correctly?


Solution

  • I think I have included everything except "inf1" and "inf2".

    page <- read_html("https://prequest.websiteseguro.com/tests/")
    
    data <- tibble(
      number = 1:length(page %>% html_nodes("li a") %>% html_text2()),
      capes = page %>% 
        html_elements("li")  %>%
        map(. %>% 
              html_node("span") %>% 
              html_text2) %>% 
        unlist(),
      name = page %>% html_nodes("li a") %>% html_text2(),
      graduation = 1:length(page %>% html_nodes("li a") %>% html_text2()) %>%
        map( ~ page %>%
               html_element(
                 xpath = paste0("/html/body/div[1]/ol/li[",
                                .x, "]/text()[2]")
               ) %>%
               html_text2) %>%
        unlist,
      inf3 = 1:length(page %>% html_nodes("li a") %>% html_text2()) %>%
        map( ~ page %>%
               html_element(
                 xpath = paste0("/html/body/div[1]/ol/li[",
                                .x, "]/text()[3]")
               ) %>%
               html_text2) %>%
        unlist
    ) %>% 
      separate(sep = "(, )(?!.*\\1)", 
               col = graduation, 
               into = c("graduation", "grad_country")) %>% 
      separate(col = grad_country, 
               sep = "\\(", 
               into = c("grad_country", "year")) %>%  
      mutate(year = year %>% parse_number()) %>%  
      separate(col = inf3, 
               sep = "(, )(?!.*\\1)", 
               into = c("inf3", "country"))
    
    Output
        # A tibble: 5,349 x 7
           number name                                      graduation                                                                     grad_country  year inf3  country
            <int> <chr>                                     <chr>                                                                          <chr>        <dbl> <chr> <chr>  
         1      1 Beatriz Castro Dias Cuyabano              Doutorado em Quantitative Genetics and Biostatistics pela Aarhus University    Dinamarca     2014 "Pes~ França 
         2      2 Caroline Mello Pimentel Schuabb           Doutorado em Ciências Naturais pelo Technische Universität Dortmund            Alemanha      2016 "Pro~ Brasil 
         3      3 Eduardo da Cruz Gouveia Pimentel          Doutorado em Zootecnia (Producao Animal) pela Universidade Estadual Paulista ~ Brasil        2007 "Wis~ Aleman~
         4      4 Julio Scliar Rerin                        Doutorado em Medicina pela University of Münster                               Alemanha      2001 "Méd~ Brasil 
         5      5 Márcio Fernando Ribeiro de Resende Júnior Doutorado em Genetics and Genomics pela University of Florida                  Estados Uni~  2014 "Ass~ Estado~
         6      6 Diego Padilha Rubert                      Doutorado em Ciência da Computação pela Universidade Federal de Mato Grosso d~ Brasil        2019 "Pro~ Brasil 
         7      7 Rodrigo Furtado dos Santos                Doutorado em Plant Molecular and Cellular Biology pela University of Florida   Estados Uni~  2020 "Cie~ Brasil 
         8      8 Nádia Maria Vieira Sampaio                Doutorado em Cell and Molecular Biology pela Colorado State University         Estados Uni~  2018 "Pes~ Brasil 
         9      9 Elisa Peripolli                           Doutorado em Genética e Melhoramento Animal pela Universidade Estadual Paulis~ Brasil        2021  NA   NA     
        10     10 Camila Ferreira Azevedo                   Doutorado em Estatística Aplicada e Biometria pela Universidade Federal de Vi~ Brasil        2015 "Mem~ Brasil 
        # ... with 5,339 more rows