如何在httr中使用set_config来通过R中的代理路由查询?

时间:2019-04-15 23:38:43

标签: r web-scraping proxy httr

我正在尝试构建一个使用代理的网络抓取工具,因为它在大型网站上的重复行为导致了IP禁令。但是,我遇到了麻烦,因为使用以下方法设置代理不会绕开禁令。

[编辑:根据以下评论者的关注,我需要澄清的是,我没有违反网站规定的服务条款,至少没有违反我可以找到的服务条款。不幸的是,我认为这种重复行为看起来可疑,并且可能陷入了旨在清除恶意行为者的自动检测过程中。]

我一直在寻找一种方法来验证我的功能实际上正在使用我试图通过其发送的IP管道,但是我找不到有关检查R环境中正在使用的现有IP的任何信息。

我对Web抓取(尤其是R)来说是一个非常陌生的人,因此,我非常感谢您能提供的任何帮助,尤其是尽可能地详细阐述。

我尝试使用...

Sys.getenv("http_proxy")

...但是这似乎与我要查找的有所不同,因为它会检查系统范围的IP设置,并且无法使用'set_config()'识别代理集。

我还尝试将输出设置为冗长,以查看网站如何查看传入的请求...

set_config(verbose())

...但是我看不到我或误解了我需要的信息。

下面是一些可复制的代码,尽管除非您有能力在禁止使用IP的网站上对其进行测试,否则您将无法准确复制我的问题。

所需的库:

library(httr)

来自https://free-proxy-list.net/

的代理和相关端口
proxies_b <- c("212.129.52.155", #anon, https
               "180.183.128.204", #anon, https
               "51.15.103.214") #anon, https
ports_b <- c(8080, 
             8213, 
             3128)

set_config(use_proxy(proxies_b[1], 
                     port = ports_b[1], 
                     username = NULL, password = NULL, 
                     auth = "basic"))

示例功能:

url_works <- function(url){
  tryCatch({
    # Returns logical based on status code.
      identical(status_code(HEAD(url)),200L) 
    }, 
    error = function(e){
      print(paste0("The URL \'", url, "\' returned: ", e))
      return(FALSE) # Returns FALSE if an error
    })
}

测试功能:

url_works("https://www.google.com") # Should return TRUE
url_works("https://www.googlebug.com/") # Should return FALSE

要清楚,此功能有效。我遇到的麻烦是,当我从禁用的IP后面运行它时,设置代理无效。我似乎找不到调试原因的函数。所以我最希望得到的答案是:

  1. 是否有一个功能可以检查“ set_config”设置的R环境中的活动代理?

  2. 您是否有任何理由可以理解为什么以这种方式设置代理不会绕开IP禁令?

  3. 此函数中的httr实际上是否甚至通过代理发送其查询,还是仍通过我的普通IP?

再次,我真的很陌生,感谢您的耐心!

0 个答案:

没有答案