Как я могу разместить простую форму HTML в R?
Я относительно новичок в программировании на R и пытаюсь использовать некоторые вещи, которые я изучаю в треке Johns Hopkins Data Science, для практического использования. В частности, я хотел бы автоматизировать процесс загрузки исторических цен облигаций с веб-сайта казначейства США.
Используя Firefox и R, я смог определить, что веб-сайт Казначейства США использует очень простую форму HTML POST, чтобы указать одну дату для интересующих котировок. Затем он возвращает таблицу информации о вторичном рынке для всех находящихся в обращении облигаций.
Я безуспешно пытался использовать два разных пакета R для отправки запроса на веб-сервер Казначейства США. Заяц два подхода, которые я попробовал:
Попытка № 1 (с использованием RCurl):
url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
td.html <- postForm(url,
submit = "Show Prices",
priceDate.year = 2014,
priceDate.month = 12,
priceDate.day = 15,
.opts = curlOptions(ssl.verifypeer = FALSE))
Это приводит к тому, что веб-страница возвращается и сохраняется в td.html
но он содержит только сообщение об ошибке от сервера treasurydirect. Я знаю, что сервер работает, потому что когда я отправляю тот же запрос через браузер, я получаю ожидаемые результаты.
Попытка № 2 (с использованием rvest):
s <- html_session(url)
f0 <- html_form(s)
f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
test <- submit_form(s, f1)
К сожалению, этот подход даже не оставляет R и приводит к следующему сообщению об ошибке от R:
Submitting with 'submit'
Error in function (type, msg, asError = TRUE) : <url> malformed
Кажется, я не могу понять, как посмотреть, какой "искаженный" текст отправляется в rvest, чтобы я мог попытаться диагностировать проблему.
Будем весьма благодарны за любые предложения или советы по решению этой кажущейся простой задачи!
2 ответа
Ну, похоже, работает с httr
библиотека.
library(httr)
url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
fd <- list(
submit = "Show Prices",
priceDate.year = 2014,
priceDate.month = 12,
priceDate.day = 15
)
resp<-POST(url, body=fd, encode="form")
content(resp)
rvest
библиотека действительно просто обертка httr
, Похоже, что он не очень хорошо интерпретирует абсолютные URL-адреса без имени сервера. Так что если вы посмотрите на
f1$url
# [1] /GA-FI/FedInvest/selectSecurityPriceDate.htm
вы видите, что он просто имеет путь, а не имя сервера. Это кажется сбивающим с толку httr
, Если вы делаете
f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
f1$url <- url
test <- submit_form(s, f1)
это похоже на работу. Возможно, это большой, что следует сообщить rvest
, (Проверено на rvest_0.1.0
)
Я знаю, что это старый вопрос, но добавление
style='POST'
параметр для postForm
делает трюк также.