Digamos que eu use read_html_live()
o rvest
pacote para extrair algum código parecido com este:
books <- minimal_html('
<div>
<div class="book">
<div class="booktitle">Book 1</div>
<div class="year">1999</div>
<div class="author">Author 1</div>
<div class="author">Author 2</div>
<div class="author">Author 3</div>
</div>
<div class="book">
<div class="booktitle">Book 2</div>
<div class="year">2022</div>
<div class="author">Author 4</div>
</div>
<div class="book">
<div class="booktitle">Book 3</div>
<div class="year">1845</div>
<div class="author">Author 5</div>
<div class="author">Author 6</div>
<div class="author">Author 7</div>
<div class="author">Author 8</div>
</div>
</div>')
Eu gostaria de usar o rvest
pacote para criar um quadro de dados (ou tibble também seria adequado) com as informações contidas acima. Gostaria que fosse organizado no nível do autor, para que cada linha contenha um autor, o título do livro e o ano.
Se eu me importasse apenas com o primeiro autor, seria fácil. Algo como:
data0 <- books %>% html_elements(".book")
title <- data0 %>% html_element(".booktitle") %>% html_text2()
year <- data0 %>% html_element(".year") %>% html_text2()
author1 <- data0 %>% html_element("author") %>% html_text2()
data <- data.frame(title, year, author1)
No entanto, eu gostaria de extrair todos os autores, sendo os autores "filhos" do livro. E o dataframe teria agora oito linhas, uma para cada autor. Por exemplo, a linha 8 teria Book 3
,, 1845
e Author 8
. Como posso fazer isso?
Aqui está uma ideia aproximada, mas estou procurando soluções mais fáceis:
data0 <- books %>% html_elements(".book")
title <- data0 %>% html_element(".booktitle") %>% html_text2()
year <- data0 %>% html_element(".year") %>% html_text2()
authors <- data0 %>% html_element(".author")
E então faça um loop sobre os três elementos dos autores e salve cada um deles em um dataframe. E então associe cada um desses dataframes de autor ao título e ano relevantes e de alguma forma transforme-os em um longo dataframe.
Aqui está uma abordagem usada
lapply
para percorrer os nós do livro:Isso colocará o atributo de classe e o texto em um conjunto de dados de pares nome-valor que será gerado em formato longo. Um identificador de livro (
book
) foi adicionado ao quadro de dados de saída para facilitar a execução de operações de agrupamento (como dinamizar para um formato amplo):Por exemplo,