如何在R中的read_html之后关闭未使用的连接

use*_*960 12 r rvest webchem

我是R的新手,我试图访问互联网上的一些信息,但我遇到了似乎没有关闭的连接问题.如果有人在这里给我一些建议,我将非常感激...

最初我想使用WebChem软件包,理论上可以提供我想要的所有内容,但是当网页中缺少某些输出数据时,WebChem不会从该页面返回任何数据.为了解决这个问题,我已经从包中获取了大部分代码,但稍微改了一下以满足我的需求.这工作得很好,关于第150个惯例,但现在,我虽然什么都没有改变,当我使用命令read_html,我得到的警告信息"关闭不使用的连接4(HTTP:......"虽然这只是一条警告消息,read_html在生成此警告后不返回任何内容.

我写了一个简化的代码,如下所示.这有同样的问题

完全关闭R(甚至重新启动我的电脑)似乎没有什么区别 - 第二次使用代码时会出现警告消息.我可以一次一个地运行查询,在循环之外没有问题,但是一旦我尝试使用循环,错误就会在第二次迭代时再次发生.我试图矢量化代码,并再次返回相同的错误消息.我尝试了showConnections(all = TRUE),但只有stdin,stdout,stderr的连接0-2.我试图找到关闭html连接的方法,但是我不能将url定义为con,而close(qurl)和close(ttt)也不起作用.(返回应用于类"字符"对象的'close'没有适用方法的错误,并且没有适用于类'c('xml_document','xml_node')的对象的'close'的适用方法",分别)

有没有人知道关闭这些连接的方法,这样他们就不会破坏我的日常工作?任何建议都会非常受欢迎.谢谢!

PS:我正在使用R版本3.3.0和RStudio版本0.99.902.

CasNrs <- c("630-08-0","463-49-0","194-59-2","86-74-8","148-79-8")
tit = character()
for (i in 1:length(CasNrs)){
  CurrCasNr <- as.character(CasNrs[i])
  baseurl <- 'http://chem.sis.nlm.nih.gov/chemidplus/rn/'
  qurl <- paste0(baseurl, CurrCasNr, '?DT_START_ROW=0&DT_ROWS_PER_PAGE=50')
  ttt <- try(read_html(qurl), silent = TRUE)
  tit[i] <- xml_text(xml_find_all(ttt, "//head/title"))
}
Run Code Online (Sandbox Code Playgroud)

nm2*_*200 9

我还没有找到这个问题的好答案。我想出的最佳解决方法是包含下面的函数,Secs = 3 或 4。我仍然不知道为什么会出现问题,或者如何在不长时间构建的情况下阻止它。

CatchupPause <- function(Secs){
 Sys.sleep(Secs) #pause to let connection work
 closeAllConnections()
 gc()
}
Run Code Online (Sandbox Code Playgroud)


小智 9

在研究了这个主题后,我想出了以下解决方案:

  url <- "https://website_example.com"
  url = url(url, "rb")
  html <- read_html(url)
  close(url)

# + Whatever you wanna do with the html since it's already saved!
Run Code Online (Sandbox Code Playgroud)