所以,这是目前的情况:
- 我有 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”都会返回“状态:200”。成功!除了文件大小为0...
我不知道问题出在哪里,但我最好的猜测是在提交表单之前没有填写文本块。如果我去网站(http://hess.ess.washington.edu/math/v3/v3_age_in.html)并手动提交一个空表格,它会产生一个空白网页:纯白色,上面什么都没有。
这种潜在解释(以及我修复代码)的问题是我不知道为什么不会填写文本块。set_values 的结果告诉我“text_block”中有 120 个字符。这是 textString 的正确长度。我不知道为什么这 120 个字符不会粘贴到 Web 表单中。
另一种可能性是 R 没有等待足够长的时间来获得来自网站的响应,但这似乎不太可能,因为单个样本(如这里)运行很快并且响应的状态代码是200。
昨天我参加了关于“在 R 中使用 Web 数据”的 DataCamp 课程。我已经从 httr 包中探索了 GET 和 POST,但我不知道如何分离 GET 响应来修改表单,然后让 POST 提交它。我考虑过尝试使用 RSelenium 包,但根据我所读到的内容,我必须下载并安装“Selenium Server”。这让我感到害怕,但我可能会这样做——如果我确信 RSelenium 会解决我的问题。当我在 CRAN 中查看 RSelenium 包中的函数名称时,不清楚哪些对我有帮助。如果没有关于 RSelenium 将如何解决我的问题的确切知识,或者即使它会,这似乎是所需时间投资的低回报。(但如果你们告诉我这是要走的路,以及要使用哪些功能,我
我已经探索了 SO 以进行修复,但我发现的所有帖子都没有帮助。我看过这里、这里和这里,列出三个。
有什么建议么?