Как наскрести цикл из базы данных? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь очистить данные из базы данных, которая не позволяет загружать напрямую. Мне удалось собрать данные из одного вида, но я пытаюсь сделать это для 159 видов. Вот почему я хотел создать цикл, который может быть полезен

test <- data.frame(site = c("url=1",
                            "url=2"),
                   html.node = "td.DataText", stringsAsFactors = F)
library(rvest)
# an empty list, to fill with the scraped data
empty_list <- list()

for (i in 1:nrow(test)){
  datatext <- pubs[i, 1]   
  datatext2 <- pubs[i, 2]       
  # scrape it!    
  empty_list[[i]] <- read_html(datatext)  %>% html_nodes(datatext2) %>% html_text()

}
names(empty_list) <- test$site

empty <- as.data.frame(empty_list)

Это то, что я пробовал до сих пор. Это только для 2 видов, как указано FID = 1 и FID = 2 в URL. Есть 159 видов. Вот почему я хотел цикл for, который идет от 1: 159 и заполняет фрейм данных, как это происходит с текущим кодом.

1 Ответ

1 голос
/ 13 мая 2019

Я смог понять это!

url="url=1"
webpage <- read_html(url)

Data.Label <- webpage %>%
  html_nodes("td.DataLabel") %>%
  html_text()

Label <- as.data.frame(t(Data.Label))
#Obtains the data labels in a dataframe that is tranposed.

Data.Text <- lapply(paste0('url=', 1:159),
                function(url){
                  url %>% read_html() %>% 
                    html_nodes("td.DataText") %>% 
                    html_text()
                })
#Creates a list of all the data text needed to populate the table

Eco.Table <- as.data.frame(Data.Text)
#Convert list into dataframe.

Eco.Table <- Eco.Table[-c(39:42), ]
#Remove irrelevant rows 

Eco.Table <- as.data.frame(t(Eco.Table))
#Transpose the dataframe into rows

rownames(Eco.Table) <- NULL
colnames(Eco.Table) <- as.character(unlist(Label))
#Reset row names and add column labels
...