gpt4 book ai didi

r - 如何使用 httr GET 命令刷新或重试特定网页?

转载 作者:行者123 更新时间:2023-12-04 13:31:16 25 4
gpt4 key购买 nike

我需要使用不同的“ key ”访问同一个网页以获取它提供的特定内容。

我有一个键列表 x我使用 GET来自 httr 的命令包访问网页,然后检索我需要的信息y .

library(httr)
library(stringr)
library(XML)

for (i in 1:20){
h1 = GET ( paste0("http:....categories=&query=", x[i]),timeout(10))
par = htmlParse(file = h1)

y[i]=xpathSApply(doc = par, path = "//h3/a" , fun=xmlValue)

}

问题是经常达到超时,它会破坏循环。

因此,如果达到超时,我想刷新网页或重试 GET 命令,因为我怀疑问题出在我尝试访问的网站的 Internet 连接上。

我的代码的工作方式,超时打破了循环。我需要忽略错误并转到下一次迭代或重试访问该网站。

最佳答案

purrr::safely() .您可以包装 GET像这样:

safe_GET <- purrr::safely(GET)

这消除了 tryCatch() 的丑陋让你做:
resp <- safe_GET("http://example.com") # you can use all legal `GET` params

你可以测试 resp$resultNULL .把它放到你的重试循环中,你就可以开始了。

您可以通过执行以下操作来查看此操作:
str(safe_GET("https://httpbin.org/delay/3", timeout(1)))

这将要求 httpbin 服务在响应前等待 3 秒,但在 GET 上设置显式超时请求到 1s。我把它包裹在 str()显示结果:
List of 2
$ result: NULL
$ error :List of 2
..$ message: chr "Timeout was reached"
..$ call : language curl::curl_fetch_memory(url, handle = handle)
..- attr(*, "class")= chr [1:3] "simpleError" "error" "condition"

因此,如果需要,您甚至可以检查消息。

关于r - 如何使用 httr GET 命令刷新或重试特定网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com