【发布时间】:2018-06-27 15:10:03
【问题描述】:
所以,这是目前的情况:
- 我有 2000 多行 R 代码,可生成几十个文本文件。此代码运行时间不到 10 秒。
- 然后我手动将这些文本文件粘贴到网站中,等待大约 1 分钟等待网站的响应(它们是大文本文件),然后手动复制和粘贴 strong> 将响应导入 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 以寻求修复,但我发现的帖子都没有帮助。我查看了here、here 和here,列出了三个。
有什么建议吗?
【问题讨论】:
标签: r web-scraping rvest httr xml2