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

R语言网页爬虫提取子页面内容时报网页未找到错误,该如何解决?

核心问题原因

  • 目标站点配置了基础反爬校验,rvest默认read_html请求不带浏览器标识,会被拦截返回404错误页,对应你看到的找不到页面提示
  • 子页面正文内容并非所有全局p标签,需指定更精准的节点选择器,避免提取空值

修复方案

直接使用修改后的代码即可:

# 加载依赖包
library(rvest)
library(dplyr)

# 配置模拟浏览器的请求头
headers = c(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
)

# 爬取列表页
link = "https://www.fmprc.gov.cn/mfa_eng/wjdt_665385/zyjh_665391/"
page = read_html(link, encoding = "UTF-8", headers = headers)

# 提取标题、链接、日期
title = page %>% html_nodes(".newsLst_mod a") %>% html_text(trim = TRUE)
slinks = page %>% html_nodes(".newsLst_mod a") %>% html_attr("href") %>% 
  paste0("https://www.fmprc.gov.cn", .)
date = page %>% html_nodes(".newsLst_mod span") %>% html_text(trim = TRUE)

# 优化后的正文提取函数,增加错误处理
get_s = function(slink) {
  # 出错时返回空值避免中断
  tryCatch({
    speeches_page = read_html(slink, encoding = "UTF-8", headers = headers)
    # 匹配正文区域的p标签,为该站点专属精准选择器
    speech_words = speeches_page %>% 
      html_nodes("#News_Body_Txt_A p") %>% 
      html_text(trim = TRUE) %>% 
      paste(collapse = ",")
    return(speech_words)
  }, error = function(e) {
    return("")
  })
}

# 批量提取正文
words = sapply(slinks, FUN = get_s, USE.NAMES = FALSE)

# 生成数据框
speeches = data.frame(title, date, words, stringsAsFactors = FALSE)

补充说明

  • 代码中增加了tryCatch错误捕获逻辑,个别失效链接不会导致整个爬取过程中断
  • 可根据需要调整请求头的User-Agent值,进一步降低被反爬拦截的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:18:02