完成网络表单并用R摄取回复?

时间:2018-01-18 14:00:44

标签: r web-scraping rvest httr xml2

所以,现在的情况如下:

  1. 我有2000多行R代码,可生成几十个文本文件。此代码在10秒内运行。
  2. 然后我将这些文本文件中的每个文本文件手动粘贴到网站,等待〜1分钟以获取网站的回复(他们是大文本文件),然后手动将响应复制并粘贴到Excel中,最后再将它们另存为文本文件。 这需要数小时 ,并且容易出现用户错误。
  3. 然后另外约600行R代码将这几十个文本文件组合成一个分析。这需要几分钟。
  4. 我想自动完成第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
    

    代码运行,每次我完成它&#34; balcoResults&#34;回复&#34;状态:200&#34;。成功! EXCEPT 文件大小为0 ...

    我不知道问题出在哪里,但我最好的猜测是文本块在提交表单之前没有填写。如果我去网站(http://hess.ess.washington.edu/math/v3/v3_age_in.html)并手动提交一个空表格,它会产生一个空白网页:纯白色,没有任何内容。

    这个潜在解释(以及我修复代码)的问题在于,我不知道为什么不填写文本块 。 set_values的结果告诉我&#34; text_block&#34;有120个字符。这是textString的正确长度。我不知道为什么这120个字符不会被粘贴到网络表单中。

    另一种可能性是R没有等待足够长的时间来从网站获得响应,但这似乎不太可能,因为单个样本(如此处)快速运行并且响应的状态代码 200。

    昨天我参加了DataCamp课程&#34;在R中使用Web数据&#34;我已经从httr包中探索过GET和POST,但是我不知道如何拆开GET响应来修改表单然后让POST提交它。我考虑过试用RSelenium软件包,但根据我所读过的内容,我必须下载并安装一个&#34; Selenium Server&#34;。这吓倒了我,但我可能会这样做 - 如果我确信RSelenium会解决我的问题。当我在RSAN上查看RSelenium软件包中的函数名称时,不清楚哪些对我有帮助。如果不了解RSelenium如何解决我的问题,或者即使它会解决问题,那么这似乎是对所需投资时间的不良回报。 (但如果你们告诉我这是要走的路,以及使用哪些功能,我很乐意去做。)

    我已经探索了SO以获得修复,但我发现的帖子都没有帮助。我查看了hereherehere,列出了三个。

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

经过两天的思考,我发现了问题。我没有将set_value函数的结果赋给变量(如果这是正确的R术语)。

以下是更正后的代码:

<ribbon>
  <tabs>
    <tab idMso="TabMail" OR "TabCalendar">
      <button id="ID1" label="XxX" onAction="OnTextButton" image="myImg1" size="large" getVisible="GetVisible"/>
      <button id="ID2" label="XxX" onAction="OnTextButton" image="myImg2" size="large" getVisible="GetVisible"/>
      ...
    </tab>
  </tabs>
</ribon>