#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))
}