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
相关产品推荐
相关产品推荐

