【发布时间】:2022-01-19 18:44:03
【问题描述】:
我正在尝试从 URL 获取文本文件。从浏览器来看,它相当简单。我只需要将 URL 中的“另存为”,就可以得到我想要的文件。起初,我在使用 rvest 登录时遇到了一些问题(请参阅 [https://stackoverflow.com/questions/66352322/how-to-get-txt-file-from-password-protected-website-jsp-in-r] [1])(我在那里上传了几张可能有用的图片)。当我使用以下代码时:
fileurl <- "http://www1.bolsadecaracas.com/esp/productos/dinamica/downloadDetail.jsp?symbol=BNC&dateFrom=20190101&dateTo=20210101&typePlazo=nada&typeReg=T"
session(fileurl)
我得到以下信息(请注意我是如何被重定向到不同的 URL,当您尝试在没有首先登录的情况下访问文件 URL 时在浏览器中发生的情况):
<session> http://www1.bolsadecaracas.com/esp/productos/dinamica/downloadDetail.jsp?symbol=BNC&dateFrom=20190101&dateTo=20210101&typePlazo=nada&typeReg=T
Status: 200
Type: text/html; charset=ISO-8859-1
Size: 84
我设法使用以下代码登录:
#Define URLs
loginurl <- "http://www1.bolsadecaracas.com/esp/usuarios/customize.jsp"
fileurl <- "http://www1.bolsadecaracas.com/esp/productos/dinamica/downloadDetail.jsp?symbol=BNC&dateFrom=20190101&dateTo=20210101&typePlazo=nada&typeReg=T"
#Create session
pgsession <- session(loginurl)
pgform<-html_form(pgsession)[[1]] #Get form
#Create a fake submit button as form does not have one
fake_submit_button <- list(name = NULL,
type = "submit",
value = NULL,
checked = NULL,
disabled = NULL,
readonly = NULL,
required = FALSE)
attr(fake_submit_button, "class") <- "input"
pgform[["fields"]][["submit"]] <- fake_submit_button
#Create and submit filled form
filled_form<-html_form_set(pgform, login="******", passwd="******")
session_submit(pgsession, filled_form)
#Jump to new url
loggedsession <- session_jump_to(pgsession, url = fileurl)
#Output
loggedsession
在我看来登录是成功的,因为当我下载它并且我不再被重定向时,会话输出与 .txt 文件的大小完全相同。查看输出。
<session> http://www1.bolsadecaracas.com/esp/productos/dinamica/downloadDetail.jsp?symbol=BNC&dateFrom=20190101&dateTo=20210101&typePlazo=nada&typeReg=T
Status: 200
Type: text/plain; charset=ISO-8859-1
Size: 32193
但是,每当我尝试使用 read_html() 或类似方法提取会话内容时,都会收到以下错误:“错误:页面似乎不是 html。”。我不知道它是否与会话的“类型:文本/纯文本”有关。
当我跑步时
loggedsession[["response"]][["content"]]
我明白了
[1] 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 7c 30 32 2f 30 31 2f 32 30 31 39 7c 52 7c 31 34 2c 39 30 7c 31 35 2c
[34] 30 30 7c 31 37 2c 38 33 7c 31 33 2c 35 30 7c 39 7c 31 33 2e 35 33 33 7c 32 30 33 2e 30 36 30 2c 31
[67] 39 7c 0a 7c 30 33 2f 30 31 2f 32 30 31 39 7c 52 7c 31 35 2c 30 30 7c 31 37 2c 39 38 7c 31 37 2c 39
关于如何提取文本文件的任何帮助???将不胜感激。
PS: 在某一时刻,仅仅使用函数我就设法得到了可以与 httr::: GET(fileurl) 一起使用的东西。那是在使用 rvest 功能并设法登录之后。但是,在关闭和打开 RStudio 之后,我无法使用该功能获得相同的输出。
【问题讨论】:
-
所以你得到了看起来像十六进制的东西。这里的任何东西:stackoverflow.com/questions/37404921/…
rawToChar(as.raw(n))- 虽然看起来像一个补丁 -
相信你可以使用httr content函数来转换数据。这是查看stackoverflow.com/questions/43459356/… 的示例。如果你看的话,那里有更好的问题/答案。