Html 如何使用R触发文件下载

Html 如何使用R触发文件下载,html,r,web-crawler,rvest,Html,R,Web Crawler,Rvest,我正在尝试使用R触发此网站上的文件下载:。基本上,在表单中输入一个ID,例如rs33914668,单击Submit。然后在新页面中,单击左下角的下载以触发文件下载 在其他帖子的帮助下,我尝试了rvest library(httr) library(rvest) library(tidyverse) pre_pg <- read_html("http://www.regulomedb.org") POST( url = "http://www.regulomedb.org", b

我正在尝试使用R触发此网站上的文件下载:。基本上,在表单中输入一个ID,例如rs33914668,单击Submit。然后在新页面中,单击左下角的下载以触发文件下载

在其他帖子的帮助下,我尝试了rvest

library(httr)
library(rvest)
library(tidyverse)

pre_pg <- read_html("http://www.regulomedb.org")
POST(
  url = "http://www.regulomedb.org", 
  body = list(
    data = "rs33914668"
  ),
  encode =  "form"
  )
) -> res
pg <- content(res, as="parsed")
库(httr)
图书馆(rvest)
图书馆(tidyverse)
预备课程

pg
url查看页面上的代码,如果您将所需的值名称与列表中的名称匹配,那么一篇简单的文章应该可以工作。你检查过这些例子了吗?表单部分显示:
元素的名称是数据。发布后,网页的元素表明它仍然是第一页。我尝试过不同的例子,但问题依然存在。我看到有人使用add_header,不知道这是否是问题的原因。
sid
是会话ID(作为cookie发送到浏览器)。使用
str(session2)
查看整个会话结果。它显示了当
textarea
中填充
rs33914668
并按下提交按钮时,访问呈现给用户的下一页的方法。它有许多列表元素,其中一个是
$url:chr“http://www.regulomedb.org/results“
。我通过在submit表单参数中添加
data=c(submit=“submit”)
来完成这篇文章。您现在需要查看该新网页,并决定要在代码中模拟哪些可能的操作。这看起来可能是一个有用的响应,但它只是一个代码。只使用代码的答案不受欢迎,因此我建议您解释一些问题,例如您如何选择参数以及为什么决定使用R Sys.time-value作为“下载令牌”。抱歉。我徒劳地复制和粘贴了代码。当我分析请求时,有一个类似于UNIX时间的下载令牌,我将其转换为正常时间,并确认这是UNIX时间(我认为在“下载令牌”字段中发送任何时间都无关紧要。非常感谢!您解决了问题,并为我提供了另一个可以学习的解决方案。干得好!
library(httr)
library(rvest)
library(RCurl)

session <- html_session("http://www.regulomedb.org")
form <- html_form(session)[[1]]
filledform <- set_values(form, `data` = "rs33914668")

session2 <- submit_form(session, filledform)
form2 <- html_form(session2)[[1]]
filledform2 <- set_values(form2)

thesid <- filledform2[["fields"]][["sid"]]$value
theurl <- paste0('http://www.regulomedb.org/download/',thesid)
download.file(theurl,destfile="test.bed",method="libcurl")
url<-"http://www.regulomedb.org/"
library(rvest)
page<-html_session(url)

download_page<-rvest:::request_POST(page,url="http://www.regulomedb.org/results",
                                    body=list("data"="rs33914668"),
                                    encode = 'form')

#This is a unique id on generated based on your query
sid<-html_nodes(download_page,css='#download > input[type="hidden"]:nth-child(8)') %>% html_attr('value')

#This is a UNIX time
download_token<-as.numeric(as.POSIXct(Sys.time()))

download_page1<-rvest:::request_POST(download_page,url="http://www.regulomedb.org/download",
                                    body=list("format"="bed",
                                              "sid"=sid,
                                              "download_token_value_id"=download_token ),
                                    encode = 'form')
writeBin(download_page1$response$content, "regulomedb_result.bed")