POST форму, используя R и httr - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь автоматически экспортировать данные из ссылки csv на этом сайте https://www.finanssivalvonta.fi/en/capital-markets/issuers-and-investors/Managers-transactions/shortselling/, используя R и пакет httr an rvest. Я попробовал следующий код безуспешно, и я не понимаю свою ошибку.

При посещении веб-сайта и использовании Chrome для просмотра выполненного POST я вижу следующую ссылку https://www.finanssivalvonta.fi/api/shortselling/datatable/current/export. Но при использовании той же ссылки в RI есть код состояния 500. Нужно ли мне копировать все заголовок / тело из хрома ПОСТ? Если да, то как я могу это сделать?

library(httr)
library(rvest)
res <- POST("https://www.finanssivalvonta.fi/api/shortselling/datatable/current/export")
res$status_code
# 500

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

url <- html_session("https://www.finanssivalvonta.fi/en/capital-markets/issuers-and-investors/Managers-transactions/shortselling/")

url %>% html_nodes("table") %>% .[[1]] %>% html_table(fill=T)

# Error in matrix(NA_character_, nrow = n, ncol = maxp) : 
#   invalid 'ncol' value (too large or NA)
# In addition: Warning messages:
#   1: In max(p) : no non-missing arguments to max; returning -Inf
# 2: In matrix(NA_character_, nrow = n, ncol = maxp) :
#   NAs introduced by coercion to integer range

Большое спасибо

1 Ответ

0 голосов
/ 06 января 2019
library(rvest)
url<-"https://www.finanssivalvonta.fi/en/capital-markets/issuers-and-investors/Managers-transactions/shortselling/"

# Get the session of the URL
page<-html_session(url)

# RVEST POST the data to the export URL
page<-rvest:::request_POST(page,url="https://www.finanssivalvonta.fi/api/shortselling/datatable/current/export",
                     encode="form",
                     body=list(
                       "draw"= 2,
                       "columns[0][data]"= "positionHolder",
                       "columns[0][searchable]"= "true",
                       "columns[0][orderable]"="false",
                       "columns[0][search][regex]"="false",
                       "columns[1][data]"="issuerName",
                       "columns[1][searchable]"= "true",
                       "columns[1][orderable]"= "false",
                       "columns[1][search][regex]"="false",
                       "columns[2][data]"="isinCode",
                       "columns[2][searchable]"= "true",
                       "columns[2][orderable]"="false",
                       "columns[2][search][regex]"="false",
                       "columns[3][data]"="netShortPositionInPercent",
                       "columns[3][searchable]"="true",
                       "columns[3][orderable]"="false",
                       "columns[3][search][regex]"= "false",
                       "columns[4][data]"="positionDate",
                       "columns[4][searchable]"="true",
                       "columns[4][orderable]"="false",
                       "columns[4][search][regex]"="false",
                       "start"= 0,
                       "length"= 10,
                       "search[regex]"="false",
                       "lang"= "en",
                       "exportOptions[columnData][positionHolder]"= "Position holder",
                       "exportOptions[columnData][issuerName]" ="Name of the issuer",
                       "exportOptions[columnData][isinCode]" = "ISIN",
                       "exportOptions[columnData][netShortPositionInPercent]"="Net short position (%)",
                       "exportOptions[columnData][positionDate]"="Date",
                       "exportOptions[lang]"="en"
                     ))

writeBin(page$response$content , "data_table.csv")

Я использовал расширенный инструмент CHROME для отслеживания сетевого трафика, когда вы нажимали «EXPORT in the выше URL». Я использовал те же параметры, чтобы отправить данные и сохранить результат как CSV.

...