tryCatch 函数适用于大多数不存在的 URL,但在(至少)一种情况下不起作用

2023-12-25

亲爱的 Stackoverflow 用户,

我正在使用 R 从《今日心理学》中抓取一些心理治疗师的资料;这样做是为了锻炼和学习更多有关网络抓取的知识。

我是 R 新手,我必须接受这种紧张的培训,这将有助于我完成未来的项目。这意味着我可能并不确切地知道我现在在做什么(例如,我可能无法很好地解释脚本或来自 R 的错误消息),但我必须完成它。因此,对于可能存在的误解或不准确之处,敬请谅解。

简而言之,情况如下。 我创建了一个函数,通过它我可以从心理治疗师个人资料的 2 个节点中抓取信息;该功能显示在此堆栈溢出帖子 https://stackoverflow.com/questions/58054707/web-scraping-and-looping-through-pages-with-r/58055188.

然后我创建一个循环,在一些心理治疗师的个人资料上使用该函数;该循环也在上面的帖子中,但我在下面报告它,因为这是脚本中产生一些问题的部分(除了我在上面提到的帖子中解决的问题之外)。

j <- 1
MHP_codes <-  c(150140:150180) #therapist identifier
df_list <- vector(mode = "list", length(MHP_codes))
  for(code1 in MHP_codes) {
    URL <- paste0('https://www.psychologytoday.com/us/therapists/illinois/', code1)
    #Reading the HTML code from the website
    URL <- read_html(URL)
    df_list[[j]] <- tryCatch(getProfile(URL), 
                             error = function(e) NA)
    j <- j + 1
  }

当循环完成时,我将来自不同配置文件的信息绑定到一个数据帧中并保存它。

final_df <- rbind.fill(df_list)
save(final_df,file="final_df.Rda")

该函数 (getProfile) 在个人配置文件上运行良好。 它也适用于小范围的配置文件 (c(150100:150150))。 请注意,我不知道实际分配的心理治疗师 ID 是什么;因此,该范围内的许多 URL 都不存在。

不过一般来说tryCatch应该可以解决这个问题。当 URL 不存在时(因此 ID 不与任何心理治疗师关联),2 个节点中的每一个(以及我的数据框中的 2 个相应变量中的每一个)都是空的(即数据框在相应的单元格)。

然而,在某些 ID 范围内,可能会出现两个问题。

首先,我收到一条错误消息,如下所示:

open.connection(x, "rb") 中的错误:HTTP 错误 404。

因此,尽管我正在使用 try Catch 并且它通常看起来有效(至少在错误消息出现之前),但这种情况还是发生了。

此外,在循环停止并且 R 运行该行之后:

final_df <- rbind.fill(df_list)

出现第二条错误消息:

警告信息: 在 df[[var]] 中: 关闭未使用的连接 3 (https://www.psychologytoday.com/us/therapys/illinois/150152 https://www.psychologytoday.com/us/therapists/illinois/150152)

该空 URL 似乎存在特定问题。 事实上,当我更改 ID 范围时,尽管 URL 不存在,循环仍能正常工作:一方面,当 URL 存在时,将从网站中抓取信息;另一方面,当 URL 不存在时,这两个变量与该 URL(以及该心理治疗师 ID)相关联的用户会得到 NA。

如果 URL 为空,是否可以告诉 R 跳过该 URL?不记录任何东西? 这个解决方案非常好,因为它会将数据帧缩小到现有的 URL,但我不知道该怎么做,也不知道它是否能解决我的问题。

谁能帮我解决这个问题?


是的,你需要包装一个tryCatch周围的read_html称呼。这是 R 尝试连接到网站的地方,因此如果连接失败,它将抛出错误(而不是返回空对象)。您可以捕获该错误,然后使用next告诉 R 跳到循环的下一次迭代。

library(rvest)
##Valid URL, works fine
URL <- "https://news.bbc.co.uk"
read_html(URL)

##Invalid URL, error raised
URL <- "https://news.bbc.co.uk/not_exist"
read_html(URL)
##Leads to error
Error in open.connection(x, "rb") : HTTP error 404.

##Invalid URL, catch and skip to next iteration of the loop
URL <- "https://news.bbc.co.uk/not_exist"
tryCatch({
URL <- read_html(URL)},
error=function(e) {print("URL Not Found, skipping")
                  next})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tryCatch 函数适用于大多数不存在的 URL,但在(至少)一种情况下不起作用 的相关文章

  • 如何找到对象的创建位置?

    我目前正在努力改进对其他脚本有不同调用的代码 我想知道在哪里创建对象 对于其中一些人来说 只需使用文本编辑器的搜索选项即可 只要看看是否obj lt or obj 有什么结果 但这不适用于使用assign功能 在加载的脚本中创建的也不是 T
  • Selenium AttributeError:列表对象没有属性 find_element_by_xpath

    我正在尝试从网站上抓取一些营养数据 到目前为止一切似乎都进展顺利 直到我遇到格式略有不同的页面 使用 selenium 和这样的行 返回一个空列表 values browser find elements by class name siz
  • data.frame 按列分组[重复]

    这个问题在这里已经有答案了 我有一个数据框 DF 说 DF 是 A B 1 1 2 2 1 3 3 2 3 4 3 5 5 3 6 现在我想将 A 列的行组合在一起 并得到 B 列的总和 例如 A B 1 1 5 2 2 3 3 3 11
  • 评估 R 中字符串指向的函数

    假设我有以下内容 x lt 1 10 squared lt function x x 2 y lt squared 我希望能够使用 y 定义的字符串来评估该函数 像 eval y 这样的东西 我知道这是错误的 但会返回 1 1 4 9 16
  • 在 R 中将本地日期时间转换为 UTC

    如何将本地日期时间转换为以下格式 12 31 2014 6 42 52 PM R 中的 UTC 我试过这个 as POSIXct as Date 12 31 2014 6 42 52 PM format m d Y H M S tz UTC
  • 为 PDF 输出添加 natbib 选项

    有没有办法指定natibib输出 PDF 时的选项bookdown 我希望 tex 输出具有命令 usepackage sort compress natbib 但似乎没有任何方法可以在 YAML 中指定它 我无法将命令添加到我的序言中 因
  • 是否可以使用像“tz=NULL”这样的东西?...“as.POSIXct”默认为依赖于语言环境的时区(与“as.Date”不同),这会导致问题

    我知道这是一个长期存在 根深蒂固的问题 但这是我经常遇到的问题 而且我看到初学者R经常与此斗争 我希望有一个令人满意的解决方案 到目前为止 我的谷歌和 SO 搜索都是空的 但如果在其他地方重复 请指出正确的方向 TL DR 有没有办法使用类
  • R 在 Ubuntu 中通过代理连接

    我在 Ubuntu 12 04 上安装了 RStudio 0 97 168 当我尝试安装 gstat 库时出现以下错误 install packages gstat dependencies TRUE Warning in install
  • 为闪亮的应用程序创建桌面图标

    当我在基本 R 提示中提供以下代码时 我会在浏览器中打开一个闪亮的应用程序 shiny runApp C Myapp 我使用 Windows 7 我试图创建一个桌面图标 以避免我的客户每次想要使用该应用程序时都键入上述代码 我创建了一个桌面
  • 两个闪亮的操作按钮

    我正在编写一个闪亮的函数 其中包含两个操作按钮 这两个按钮是左右按钮 单击时可以帮助绘图移动 第一次单击时 这两个按钮都工作正常 当我重新单击它们时 就会出现问题 无论我单击哪个按钮 它都会在两个范围之间来回弹跳 我猜可能是 右 和 左 按
  • R Plotly 禁用图例单击和图例双击

    我想使用 R Plotly 从服务器端禁用绘图图例选择 我们看here https community plot ly t disable legend click functionality hiding traces 1345 2可以使
  • 为什么 quosures 在 group_by() 中起作用,但在 filter() 中不起作用?

    我正在构建一个函数 我将根据字符串操作数据框 在该函数中 我将根据字符串构建一个列名称 并使用它来操作数据框 如下所示 library dplyr orig df lt data frame id 1 3 amt c 100 200 300
  • 检测外部 URL 的最快方法

    检测是否最快的方法是什么foo http john doe 是一个外部的url questions tagged url 相比于window location href Update 我做了更多研究 发现使用new URL很容易足够快 而且
  • R 包“raster”在搜索“terra”最新版本时无法上传

    我正在 Windows 10 中使用 RStudio 2021 09 2 中的 R 4 1 2 工作 我正在处理空间数据 包括矢量和栅格 但三天前命令库 栅格 开始向我发出此警告 错误 loadNamespace i c lib loc l
  • 插值时间序列

    我有两组具有不同时间戳的数据 一组数据包含校准数据 另一组包含样本数据 校准的频率比样品少得多 我想做的是将校准数据 低频 插值到采样时间序列 高频 上 sam lt textConnection time value 01 00 52 2
  • 如何在 R 中使用 msgbox [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在中显示消息框R 我正在寻找类似的东西msgbox在 VBA 中 因此我可以向用户发出有关问题的警报 此外 我想允许一些用户交互 例如
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • ggplot2:图例中的斜体

    我正在尝试编辑图例中的标签 以便第一个标签 WT 为纯文本 而后续 7 个标签为斜体 我一直在使用element text face c plain rep italic 7 但这导致没有任何标签被转换为斜体 我有点困惑为什么它不起作用 因
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法

随机推荐