Я ищу помощь в очистке всех данных с веб-сайта. Стандартный подход, который я бы использовал с rvest
(обрисован в общих чертах ниже), не работает, поскольку данные, по-видимому, находятся под запросом POST, и я не могу изменить URL-адрес, чтобы получить более 30 результатов из встроенной таблицы.
Я думаю, у меня есть 2 варианта:
- Выяснить параметры запроса Post после ссылки Export Data и реплицировать запрос (аналогично: Очистка динамической таблицы вR с POST )
- Определите параметры запроса Post, который изменяет номера страниц, и используйте некоторую форму
purrr::map
, чтобы отобразить все страницы, и очистите информацию, используя rvest
,
Я открыт для любого подхода. Я, очевидно, хотел бы более эффективный. Единственная проблема, с которой я столкнулся при первом подходе, заключается в том, что в экспортированном .csv
отсутствует информация об игроке. Я могу очистить эту информацию, используя rvest
. Я обрисовал это ниже.
Кроме того, я работаю со многими URL, которые имеют параметры запроса. Есть ли более эффективный способ создания URL (в случае, если я хочу сделать любой из параметров запроса частью аргумента функции)? Для этого я скопировал и вставил параметры из Firefox, затем вручную добавил запятые и кавычки. Должен быть более прямой способ сделать это.
rvest
очистка одной страницы
library(dplyr)
url <- list(
hostname = "www.fangraphs.com/auctiontool.aspx",
scheme = "https",
query = list(
type = "pit",
proj = "2019",
pos = "1,1,1,1,5,1,1,1,0,1,6,3,0,5,0",
dollars = "260",
teams = "12",
mp = "20",
msp = "5",
mrp = "5",
mb = "1",
split = "",
points = "c|0,1,2,3,4|0,1,2,3,4",
lg = "MLB",
rep = "0",
drp = "0",
pp = "C,SS,2B,3B,OF,1B",
players = ""
)) %>% data.table::setattr("class", "url")
url <- httr::build_url(url)
page <-
url %>%
xml2::read_html()
players <-
page %>%
rvest::html_nodes("table.rgMasterTable a[href *= 'playerid']") %>%
rvest::html_text()
# get playerid's
player_ids <-
page %>%
rvest::html_nodes("table.rgMasterTable a[href *= 'playerid']") %>%
rvest::html_attr("href") %>%
stringr::str_extract("[0-9]{2,8}")
# get players
df_players <-
tibble(playerid = player_ids, Name = players) %>%
distinct()
# get column names
column_names <-
page %>%
rvest::html_nodes("th.rgHeader") %>%
rvest::html_text()
table_data <-
page %>%
rvest::html_table(fill = TRUE, header = NA) %>%
.[[15]] %>%
as_tibble()
Created on 2019-10-23 by the reprex package (v0.3.0)
Затем моя попытка запустить запрос POST. Я застреваю при построении параметров из данных POST.
resp <-
httr::POST(url) %>%
xml2::read_html()
view <-
resp %>%
rvest::html_nodes("input[name='__VIEWSTATE']") %>%
rvest::html_attr("value")
event <-
resp %>%
rvest::html_nodes("input[name='__EVENTVALIDATION']") %>%
rvest::html_attr("value")
# here is where I'm stuck. I go into firefox, click export data, and then copy the post data. The response is very long, and appears like it needs a ton of manual formatting to add quotes and commas. What's the right way to build the params?
params <-
list(
)
request <- httr::POST(url, body = params, encode = "form")
# Create data frame from scrape
df <- read.csv(textConnection(as.character(request)))