Как очистить несколько страниц в R

#r #screen-scraping

#r #очистка экрана

Вопрос:

Я начинающий студент в R, в настоящее время работаю над удалением имен и зарплат игроков НБА из: http://www.espn.com/nba/salaries/_/year/2019/page/1/seasontype/3

С этого сайта я хочу очистить все 13 страниц

Я нашел функцию, которая позволяет мне очищать нужное количество наблюдений, но вместо того, чтобы получать все 13 страниц. Он повторяет первую страницу 13 раз и помещает их в 1 таблицу. Кто-нибудь знает, как это исправить? Это очень помогло бы мне

 

library(httr)
library(tidyverse)
library(dplyr)
library(rvest)
library(readxl)
library(xml2)
library(readxl)
library(tibble)
library(jsonlite)
library(purrr)


salary_by_player = data.frame()

#link <- "http://www.espn.com/nba/salaries/_/year/2019/page/1/seasontype/3"
for(page_result in seq(from = 1, to = 13, by = 1)){
  link = paste("http://www.espn.com/nba/salaries/_/year/2019/page/", page_result, "/seasontype/3")
  page = read_html(link)
  
  name = page %>% html_nodes("td:nth-child(2) a") %>% html_text()
  salary = page %>% html_nodes(".oddrow td:nth-child(4) , .evenrow td:nth-child(4)") %>% html_text()
  salary_by_player = rbind(salary_by_player, data.frame(name, salary, stringsAsFactors = FALSE)) 
  
  print(paste("Page:", page_result))
}


  

Ответ №1:

Проблема в том, что paste() по умолчанию для соединения строк используются пробелы. Вы можете исправить это, указав sep параметр следующим образом:

 link = paste("http://www.espn.com/nba/salaries/_/year/2019/page/", page_result, "/seasontype/3", sep='')
  

Или полностью выписано так:

 library(rvest)
library(dplyr)
library(xml2)

salary_by_player = data.frame()

for(page_result in seq(from = 1, to = 13, by = 1)){
  link = paste("http://www.espn.com/nba/salaries/_/year/2019/page/", page_result, "/seasontype/3", sep='')
  page = read_html(link)
  
  name = page %>% html_nodes("td:nth-child(2) a") %>% html_text()
  salary = page %>% html_nodes(".oddrow td:nth-child(4) , .evenrow td:nth-child(4)") %>% html_text()
  salary_by_player = rbind(salary_by_player, data.frame(name, salary, stringsAsFactors = FALSE)) 
  
  print(paste("Page:", page_result))
}