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

如何用R抓取网站链接?返回character(0)求解决

问题与修复方案

问题描述

尝试抓取Wayback Machine中对应赛事分类页面的链接,使用rvest和tidyverse包,代码如下:

library(rvest)
library(tidyverse)
url=read_html('https://web.archive.org/web/*/https://www.bjjcompsystem.com/tournaments/1869/categories*')

get_links <- url %>% 
  html_nodes('#resultsUrl a') %>% 
  html_attr('href') %>%
  paste0('https://web.archive.org/web/20220000000000*/', .)
get_links

运行后仅返回character(0),尝试查找li类也未找到有效信息。

错误原因

  • URL解析问题:read_html()无法直接处理带通配符*的Wayback Machine搜索URL,这类URL是Wayback的搜索入口,并非可直接抓取的静态页面。
  • 选择器不匹配:Wayback搜索结果页面的DOM结构中,不存在#resultsUrl这个ID的元素,原选择器无法定位到目标节点。

修复方案

1. 构造可抓取的搜索结果URL

首先使用正确的Wayback搜索URL(去掉末尾多余的*,Wayback会自动识别搜索范围):

library(rvest)
library(tidyverse)

# 正确的搜索结果页面URL
search_page <- read_html("https://web.archive.org/web/*/https://www.bjjcompsystem.com/tournaments/1869/categories")

2. 使用正确的CSS选择器提取链接

Wayback的归档条目统一在.wb-alldata容器下的a标签中,用以下代码提取:

# 提取所有历史归档链接
all_archive_links <- search_page %>%
  html_nodes(".wb-alldata a") %>%
  html_attr("href")

# 过滤出目标赛事分类页面的链接
target_links <- all_archive_links[str_detect(all_archive_links, "tournaments/1869/categories")]

# (可选)生成2022年范围内的归档链接
2022_archive_links <- target_links %>%
  str_replace("web/\\d+/", "web/20220000000000*/") %>%
  unique()

3. 验证结果

运行后2022_archive_links会返回2022年所有该页面的归档链接,target_links则包含所有历史版本的链接。

注意:Wayback Machine有反爬限制,频繁请求可能被拦截,建议添加请求延迟或遵守网站爬取规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:20:28