Заполнение веб-форм и прием ответов R?
Итак, вот текущая ситуация:
- У меня есть более 2000 строк кода R, который создает пару десятков текстовых файлов. Этот код выполняется менее чем за 10 секунд.
- Затем я вручную вставляю каждый из этих текстовых файлов в веб-сайт, жду ~1 минуты для ответа веб-сайта (это большие текстовые файлы), затем вручную копирую и вставляю ответ в Excel и, наконец, снова сохраняю их как текстовые файлы. Это занимает часы и подвержено ошибкам пользователя.
- Затем еще ~600 строк кода R объединяют эти десятки текстовых файлов в единый анализ. Это займет пару минут.
Я хотел бы автоматизировать шаг 2- и я думаю, что я близок, я просто не могу заставить его работать. Вот пример кода:
library(xml2)
library(rvest)
textString <- "C2-Boulder1 37.79927 -119.21545 3408.2 std 3.5 2.78 0.98934 0.0001 2012 ; C2-Boulder1 Be-10 quartz 581428 7934 07KNSTD ;"
url <- "http://hess.ess.washington.edu/math/v3/v3_age_in.html"
balcoForm <- html_form(read_html(url))[[1]]
set_values(balcoForm, summary = "no", text_block = textString)
balcoResults <- submit_form(html_session(url), balcoForm, submit = "text_block")
balcoResults
Код выполняется, и каждый раз, когда я это делаю, "balcoResults" возвращается с "Status: 200". Успех! За исключением размера файла 0...
Я не знаю, в чем проблема, но я думаю, что текстовый блок не заполняется до отправки формы. Если я захожу на веб-сайт ( http://hess.ess.washington.edu/math/v3/v3_age_in.html) и вручную отправляю пустую форму, она создает пустую веб-страницу: чисто белая, на ней ничего нет.
Проблема с этим потенциальным объяснением (и исправлением кода) заключается в том, что я не знаю, почему текстовый блок не будет заполнен. Результаты set_values говорят мне, что "text_block" содержит 120 символов. Это правильная длина для textString. Я не знаю, почему эти 120 символов не будут вставлены в веб-форму.
Альтернативная возможность состоит в том, что R не ждет достаточно долго, чтобы получить ответ от веб-сайта, но это кажется менее вероятным, потому что один образец (как здесь) выполняется быстро и код состояния ответа равен 200.
Вчера я прошел курс DataCamp "Работа с веб-данными в R." Я исследовал GET и POST из пакета httr, но я не знаю, как выделить GET-ответ, чтобы изменить форму, а затем заставить POST отправить ее. Я подумал о том, чтобы попробовать пакет RSelenium, но согласно тому, что я прочитал, мне придется скачать и установить "Selenium Server". Это пугает меня, но я, вероятно, мог бы сделать это - если бы был уверен, что RSelenium решит мою проблему. Когда я смотрю на CRAN имена функций в пакете RSelenium, не ясно, какие из них мне помогут. Без точных знаний о том, как RSelenium решит мою проблему, или даже если это произойдет, это кажется плохой отдачей от затрат времени. (Но если бы вы, ребята, сказали мне, что это был путь и какие функции использовать, я был бы рад сделать это.)
Я исследовал SO для исправлений, но ни один из постов, которые я нашел, не помог. Я посмотрел здесь, здесь и здесь, чтобы перечислить три.
Какие-либо предложения?
1 ответ
После двух дней размышлений я заметил проблему. Я не присваивал результаты функции set_value переменной (если это правильная терминология R).
Вот исправленный код:
library(xml2)
library(rvest)
textString <- "C2-Boulder1 37.79927 -119.21545 3408.2 std 3.5 2.78 0.98934 0.0001 2012 ; C2-Boulder1 Be-10 quartz 581428 7934 07KNSTD ;"
url <- "http://hess.ess.washington.edu/math/v3/v3_age_in.html"
balcoForm <- html_form(read_html(url))[[1]]
balcoForm <- set_values(balcoForm, summary = "no", text_block = textString)
balcoResults <- submit_form(html_session(url), balcoForm, submit = "text_block")
balcoResults