Заполнение веб-форм и получение ответов с помощью R?

Итак, вот текущая ситуация:

  1. У меня более 2000 строк кода R, который создает пару десятков текстовых файлов. Этот код выполняется менее чем за 10 секунд.
  2. Затем я вручную вставляю каждый из этих текстовых файлов на веб-сайт, жду ~ 1 минуту ответа веб-сайта (это большие текстовые файлы), затем вручную копирую и вставляю ответ в Excel и, наконец, снова сохраните их как текстовые файлы. Это занимает несколько часов и может привести к ошибкам пользователя.
  3. Затем еще ~ 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 на предмет исправлений, но ни одна из найденных мною публикаций не помогла. Я посмотрел здесь, здесь и здесь, чтобы перечислить три.

Какие-либо предложения?


person Richard Becker    schedule 18.01.2018    source источник


Ответы (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
person Richard Becker    schedule 20.01.2018