使用R中的RCurl填写表格以获取网站上的气象数据

时间:2018-11-23 12:11:01

标签: r forms url rcurl

我正在尝试从INMET网站获取降雨量数据。 首先,它需要发布一个包含用户名和密码的表单,然后使用一些参数填充表单。

我首先尝试使用Rcurl软件包中的“ postform”功能设置登录参数,然后生成用于访问数据的URL。

params<-list('E-mail do Usuário' = "username", 'Senha' = "xxxxx") #grabbed from html text
html<-postForm('http://www.inmet.gov.br/projetos/rede/pesquisa/inicio.php', params = params, curl = getCurlHandle(), style="POST")
station<-"83630"
startdate<-"01/01/1981"
enddate<-"01/01/2018"
url.data<-sprintf("http://www.inmet.gov.br/projetos/rede/pesquisa/gera_serie_txt.php?&mRelEstacao=%s&btnProcesso=serie&mRelDtInicio=%s&mRelDtFim=%s&mAtributos=,,,,,,,,,,1,,,,,,", station, startdate, enddate)

url.data是最终的URL,我可以通过html访问数据

我对此有些困惑,但我想我快要到了。

1 个答案:

答案 0 :(得分:1)

由于我没有帐户,因此无法超越登录名。对于登录,该站点发出一个POST请求,最终看起来像这样:

POST /projetos/rede/pesquisa/inicio.php HTTP/1.1
Host: www.inmet.gov.br
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.7,fr-BE;q=0.3
Referer: http://www.inmet.gov.br/projetos/rede/pesquisa/inicio.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Connection: close
Cookie: PHPSESSID=0j7eg8u12gka0c774aalahm9s0
Upgrade-Insecure-Requests: 1

mUsuario=USERNAME&mGerModulo=PES&mCod=a&mSenha=PASSWORD&mGerModulo=PES&btnProcesso=+Acessar+

因此,它传入了其他一些查询参数。作为list,他们看起来像这样:

list(
  mUsuario = "USERNAME", 
  mGerModulo = "PES", 
  mCod = "a", 
  mSenha = "PASSWORD", 
  mGerModulo = "PES", 
  btnProcesso = "+Acessar+"
)

请注意,您需要使用输入表单name和表单文本。我不知道您是否需要继续为每个请求传递用户名/通行证,因为我无法通过登录页面,所以我不能为任何其他请求提供帮助。