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

使用R语言爬取Wayback Machine中指定网站的历史版本

获取Wayback Machine网站历史版本的R语言高效方案

问题分析

你之前用正则匹配HTML源码失败,大概率是因为Wayback Machine的HTML结构变化,或者正则表达式的匹配规则没覆盖到实际的链接格式。下面提供两种更可靠的方案,均适用于任意网站的历史版本获取。

方案一:使用Wayback Machine CDX API(推荐)

Wayback提供官方的CDX索引API,直接返回结构化的历史快照数据,无需解析HTML,稳定性和效率都更高。

代码实现

library(jsonlite)
library(lubridate)

# 目标网站URL
target_url <- "https://covid.cdc.gov/covid-data-tracker/"

# 构造CDX API请求URL,自动编码特殊字符
cdx_request_url <- sprintf(
  "https://web.archive.org/cdx/search/cdx?url=%s&output=json",
  URLencode(target_url)
)

# 获取JSON格式的快照数据
cdx_raw_data <- fromJSON(cdx_request_url)

# 转换为数据框并设置列名
colnames(cdx_raw_data) <- c("urlkey", "timestamp", "original", "mimetype", "statuscode", "digest", "length")
cdx_df <- as.data.frame(cdx_raw_data[-1, ], stringsAsFactors = FALSE)

# 处理日期、时间和完整快照链接
cdx_df$date <- format(ymd_hms(cdx_df$timestamp), "%b-%d-%Y")
cdx_df$time <- format(ymd_hms(cdx_df$timestamp), "%H:%M:%S")
cdx_df$links <- sprintf("https://web.archive.org/web/%s/%s", cdx_df$timestamp, cdx_df$original)

# 提取需要的列并查看结果
result_df <- cdx_df[, c("date", "links", "time")]
head(result_df)

扩展说明

  • 可以添加参数过滤时间范围,比如只获取2023年的快照:&from=20230101&to=20231231
  • 若需要去重(同一时间的多个快照),可以添加参数&collapse=timestamp:10(按10分钟粒度去重)

方案二:使用网页解析包rvest解析Wayback页面

如果不想依赖API,用rvest解析HTML比正则更可靠,因为它直接基于DOM结构定位元素,不易受小范围HTML变化影响。

代码实现

library(rvest)
library(lubridate)

# Wayback Machine的目标网站历史页面URL
wayback_page_url <- "https://web.archive.org/web/*/https://covid.cdc.gov/covid-data-tracker/"

# 读取页面内容
page <- read_html(wayback_page_url)

# 提取所有历史快照链接(根据Wayback页面结构调整选择器)
raw_links <- page %>% 
  html_elements("a[href^='/web/']") %>% 
  html_attr("href")

# 过滤出目标网站的快照链接
target_links <- raw_links[grepl("https://covid\\.cdc\\.gov/covid-data-tracker/", raw_links)]

# 构造完整的快照链接
full_links <- sprintf("https://web.archive.org%s", target_links)

# 从链接中提取时间戳并转换格式
timestamps <- sub("/web/(\\d+)/.*", "\\1", target_links)
dates <- format(ymd_hms(timestamps), "%b-%d-%Y")
times <- format(ymd_hms(timestamps), "%H:%M:%S")

# 生成结果数据框
result_df <- data.frame(date = dates, links = full_links, time = times, stringsAsFactors = FALSE)
head(result_df)

注意事项

  • 若Wayback页面结构更新,可能需要调整html_elements中的CSS选择器(比如查看页面源码,找到快照链接所在的容器类名)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:52