嗯,这是可行的。但这需要费点力气。
这部分:
library(rvest)
library(httr)
library(tidyverse)
POST(
url = "http://www.cbs.dtu.dk/cgi-bin/webface2.fcgi",
encode = "form",
body=list(
`configfile` = "/usr/opt/www/pub/CBS/services/SignalP-4.1/SignalP.cf",
`SEQPASTE` = "MTSKTCLVFFFSSLILTNFALAQDRAPHGLAYETPVAFSPSAFDFFHTQPENPDPTFNPCSESGCSPLPVAAKVQGASAKAQESDIVSISTGTRSGIEEHGVVGIIFGLAFAVMM",
`orgtype` = "euk",
`Dcut-type` = "default",
`Dcut-noTM` = "0.45",
`Dcut-TM` = "0.50",
`graphmode` = "png",
`format` = "summary",
`minlen` = "",
`method` = "best",
`trunc` = ""
),
verbose()
) -> res
满足您提出的要求。我离开了verbose()
这样你就可以观察发生了什么。它缺少“文件名”字段,但您指定了字符串,因此它很好地模仿了您所做的事情。
现在,棘手的部分是它使用中间重定向页面,让您有机会输入电子邮件地址以在查询完成时收到通知。它会定期(每约 10 秒左右)检查查询是否完成,如果完成,将快速重定向。
该页面具有查询 ID,可以通过以下方式提取:
content(res, as="parsed") %>%
html_nodes("input[name='jobid']") %>%
html_attr("value") -> jobid
现在,我们可以模仿最终的请求,但我会添加一个Sys.sleep(20)
在此之前确保报告完成。
GET(
url = "http://www.cbs.dtu.dk/cgi-bin/webface2.fcgi",
query = list(
jobid = jobid,
wait = "20"
),
verbose()
) -> res2
获取最终结果页面:
html_print(HTML(content(res2, as="text")))
您可以看到图像丢失,因为GET
仅检索 HTML 内容。您可以使用以下函数rvest
/xml2
解析页面并刮出表格和 URL,然后您可以使用它们来获取新内容。
为了完成这一切,我使用了打嗝套件 https://portswigger.net/burp/freedownload拦截浏览器会话,然后我的burrp https://github.com/hrbrmstr/burrpR 包来检查结果。您还可以在 burpsuite 中进行直观检查并更手动地构建内容。