【问题标题】:Error in open.connection(x, "rb") : Couldn't connect to serveropen.connection(x, "rb") 中的错误:无法连接到服务器
【发布时间】:2019-03-13 22:20:58
【问题描述】:

尝试在 R 中使用 rvest 包时收到以下错误:

open.connection(x, "rb") 中的错误:无法连接到服务器

是什么导致了这个错误信息?功能如下图:

htmlpage <- read_html("http://forecast.weather.gov/MapClick.php?lat=42.27925753000045&lon=-71.41616624299962#.V17UH-IrKHs")

【问题讨论】:

  • 对我来说运行良好。可能只是您的互联网连接。
  • 也有同样的问题。您在哪种计算机上运行代码?

标签: html r


【解决方案1】:

我尝试了不同的方法,问题不在于代理连接,而在于 R 获取连接的方式。通过在url()内定义url的二进制连接问题解决了。

con <- url("http://www.imdb.com/title/tt1490017/", "rb") 
lego_movie <- read_html(con)

【讨论】:

  • 在尝试其他方法后对我有用..比如使用 httr::GET 代理等,但那些没有用。
【解决方案2】:

你必须打开一个会话然后从中读取

htmlpage <- html_session("http://forecast.weather.gov/MapClick.php?lat=42.27925753000045&lon=-71.41616624299962#.V17UH-IrKHs", httr::user_agent("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20"))

htmlpage %>%
  read_html() %>%
  html_text()

【讨论】:

  • 我最初在办公室使用 HP ZBook 工作计算机时遇到此错误。当我将工作计算机连接到热点时,问题就消失了。同样,当我在家中使用我的个人 HP 时,我没有收到同样的错误。我认为这个问题是由我公司办公室的安全设置引起的。
【解决方案3】:

问题在于您的工作计算机一直在寻找您公司的代理服务器,无论您是在工作中、使用热点还是在家中,都会发生这种情况。

解决这个问题的最简单方法是在您的函数中添加一个参数atWork,然后使用httr::use_proxy() 函数设置要使用的适当代理:

myFunction <- function(arg1, atWork)

    if(atWork){
        proxy.string <- use_proxy("http://proxy-server.YourCompanyName.com", port = 8080)
    } else {
        proxy.string <- use_proxy("")
    }

# then open a session
sess <- html_session(myUrl, proxy.string)

do stuff here
return(result)
}

当然,您需要将proxy-server.YourCompanyName 替换为您实际公司的代理服务器网址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多