Using the code below, why am I only collecting the data from the last page of the Loop? [closed]

-5
rm(list=ls())
options(warn=-1)
library("RCurl")
library("XML")

baseurl <- "http://www.gmbahia.ufba.br/index.php/gmbahia/issue/archive?issuesPage=XX#issues"
dados <- data.frame()

for (i in 1:29){
      print(i)
      url <- gsub("XX", i, baseurl)
      url <- xmlRoot(htmlParse(readLines(url)))
      links <- getNodeSet(url, "//a")}

## Links das Teses
links.teses <- xmlSApply(links, xmlGetAttr, name = "href")
links.teses <- grep("view", links.teses, value = T)
links.teses

## Nomes das Edições
teses.titulos <- xmlSApply(links, xmlValue)
teses.titulos <- grep("de", teses.titulos, value = T)
teses.titulos

dados <- rbind(teses.titulos, links.teses)} 
View(dados)
    
asked by anonymous 10.08.2015 / 19:02

1 answer

1

See the code hint below. Now it's working. The loop had to be closed (as @cantoni had already said). But the problem you reported had to do with the fact that you were over-writing the data collected at each iteration of the for.

What you want is to add rows to the database. So you have to concatenate the existing data with the new ones. That is: the "data" object has to be quoted inside the rbind. It is a recursive operation: the new value of this data.frame is equal to the old one plus the updates.

But before that, you have to transform the vectors "teses.titulos" and "links.teses" into two columns - what I did below with cbind.

# rm(list=ls()) # não é legal colocar no StackOverFlow essa linha...
# options(warn=-1) #não é legal desativar todos os avisos. Coloquei essa opção dentro do comando readLines (abaixo)
#library("RCurl") # desativei -- esse pacote não está sendo usado
library("XML")

baseurl <- "http://www.gmbahia.ufba.br/index.php/gmbahia/issue/archive?issuesPage=XX#issues"

dados <- data.frame()

for (i in 1:10){
  print(i)
  url <- gsub("XX", i, baseurl)
  url <- xmlRoot(htmlParse(readLines(url, warn = F))) # adicionei a opcao de remover avisos aqui
  links <- getNodeSet(url, "//h4/a") #adicionei h4 aqui -- pra pegar só os links de teses

  ## Links das Teses
  links.teses <- xmlSApply(links, xmlGetAttr, name = "href")
  #links.teses <- grep("view", links.teses, value = T) #desativei - linha desnecessária
  #links.teses  #desativei - linha desnecessária

  ## Nomes das Edições
  teses.titulos <- xmlSApply(links, xmlValue)
  #teses.titulos <- grep("de", teses.titulos, value = T) #desativei - linha desnecessária
  #teses.titulos #desativei - linha desnecessária
  dados <- rbind(dados, cbind(teses.titulos, links.teses)) #aqui estava o erro
  } 
    
10.08.2015 / 19:38