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

如何使用R的purrr与rvest库爬取网页演讲稿转录全文

代码问题诊断

你现有代码存在3个核心问题:

  • 依赖包拼写错误:你调用的library(purr)拼写错误,正确的包名为purrr
  • 详情页链接提取逻辑错误:.p-name节点下的跳转链接直接存放在<a>标签中,并非嵌套在<p>标签内,你调用html_node("p")会匹配不到节点,导致link字段全部返回NA
  • 缺少详情页抓取逻辑:现有代码仅完成了列表页的日期、标题提取,没有进一步请求每个演讲详情页获取正文内容
修正后可抓取全文的代码
# 加载依赖包
library(purrr)
library(rvest)
library(dplyr)

# 列表页基础地址
url_kremlin <- "http://kremlin.ru/events/president/transcripts/page/"

# 第一步:抓取前10页列表的基础信息
map(1:10, safely(function(i) {
  # 请求间隔1秒,避免触发反爬
  Sys.sleep(1)
  pg <- read_html(paste0(url_kremlin, i))
  # 修正链接提取逻辑,直接取.p-name下a标签的href属性
  data.frame(
    date = html_text(html_nodes(pg, ".dt-published"), trim = TRUE),
    title = html_text(html_nodes(pg, ".p-name"), trim = TRUE),
    link = html_attr(html_node(html_nodes(pg, ".p-name"), "a"), "href"),
    stringsAsFactors = FALSE
  )
})) %>% 
  # 提取成功抓取的结果,合并为统一数据框
  map("result") %>% 
  bind_rows() -> kremlin_list

# 第二步:遍历所有详情链接,抓取演讲全文
kremlin_full <- pmap_dfr(kremlin_list, function(date, title, link) {
  # 拼接完整的详情页访问地址
  full_link <- paste0("http://kremlin.ru", link)
  Sys.sleep(1)
  tryCatch({
    detail_pg <- read_html(full_link)
    # 提取正文内容,.article__text为站点正文容器的固定类名
    content <- html_text(html_nodes(detail_pg, ".article__text"), trim = TRUE) %>% 
      paste(collapse = "\n")
    data.frame(date, title, link = full_link, content, stringsAsFactors = FALSE)
  }, error = function(e) {
    # 单个页面抓取失败时返回空正文,不中断整体任务
    data.frame(date, title, link = full_link, content = NA, stringsAsFactors = FALSE)
  })
})
注意事项
  • 代码中设置了1秒的请求间隔,避免短时间大量请求触发站点反爬导致IP被封禁
  • 增加了异常捕获逻辑,单个页面抓取失败不会中断整个爬取任务,失败的记录正文会标记为NA,可后续单独重试
  • 该站点所有内容为俄语,如需翻译可额外接入翻译接口批量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:06