You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中检测Psychology Today治疗师目录URL有效性遇异常求助

检查Psychology Today目录URL有效性的R语言方案

需求说明

需要批量验证《今日心理学》(Psychology Today)治疗师目录的分页URL是否有效:

  • 有效URL:如https://www.psychologytoday.com/us/therapists/new-york/a?page=10,对应真实存在的分页页面
  • 无效URL:如https://www.psychologytoday.com/us/therapists/new-york/a?page=119,访问会被重定向到无分页的通用页面https://www.psychologytoday.com/us/therapists/new-york/a

最终目标是筛选出纽约地区姓氏以"A"开头的治疗师的所有有效分页URL,后续将复用逻辑处理其他字母开头的目录。

现有尝试的问题

尝试过两种常见的URL有效性检查方案,均出现误判:

  1. RCurl的url.exists():对真实存在的URL返回FALSE
  2. 基于httr的自定义检查函数:对所有测试URL(含3个有效URL)均返回FALSE

问题根源在于:

  • 部分网站会拦截HEAD请求(自定义函数优先用HEAD)
  • 无效URL并非返回4xx/5xx状态码,而是返回3xx重定向到通用页面,常规的状态码判断无法区分有效/无效

解决方案

通过对比请求后的最终URL与原URL的核心路径来判断有效性:如果请求后被重定向到不带分页参数的通用页面,则判定为无效;否则为有效。

代码实现

# 加载所需包
pacman::p_load(httr, dplyr, stringr)

# 设置浏览器UA,避免被反爬拦截
options(HTTPUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36")

# 自定义URL有效性检查函数
is_valid_pt_url <- function(url) {
  # 发送GET请求,允许自动跟随重定向
  res <- tryCatch(
    GET(url, followlocation = TRUE),
    error = function(e) return(FALSE)
  )
  
  # 检查请求是否成功
  if (http_error(res)) return(FALSE)
  
  # 提取原URL的基础路径(去掉page参数)
  base_url <- str_remove(url, "\\?page=\\d+")
  # 提取请求后的最终URL路径
  final_url_path <- url_parse(res$url)$path
  
  # 对比:如果最终路径不等于基础路径,说明未被重定向到通用页面,URL有效
  return(!identical(final_url_path, url_parse(base_url)$path))
}

# 测试示例URL
some_urls <- c(
  "https://www.psychologytoday.com/us/therapists/new-york/a?page=10", # 有效
  "https://www.psychologytoday.com/us/therapists/new-york/a?page=4",  # 有效
  "https://www.psychologytoday.com/us/therapists/new-york/a?page=140",# 无效
  "https://www.psychologytoday.com/us/therapists/new-york/a?page=3"   # 有效
)

# 批量检查并输出结果
tibble(
  url = some_urls,
  is_valid = sapply(some_urls, is_valid_pt_url)
)

逻辑说明

  1. UA设置:模拟浏览器请求,避免被网站的反爬机制拦截
  2. 重定向处理:自动跟随重定向,获取最终跳转后的URL
  3. 路径对比:
    • 从原URL中移除?page=xxx参数,得到通用页面的基础路径
    • 对比最终URL的路径与基础路径:若一致,说明原URL被重定向到通用页面(无效);若不一致,说明原URL对应真实分页(有效)

内容的提问来源于stack exchange,提问作者Anna Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:33:25