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

使用rvest爬取网页返回{{article.Link}}而非真实链接如何解决

R爬取JS动态渲染页面的解决方案

问题原因

当前抓取到的{{article.Link}}是前端框架的模板占位符,真实链接由页面加载完成后执行的JavaScript脚本异步请求后端接口后填充到页面中。rvest仅支持读取初始静态HTML源码,无法执行JS渲染逻辑,因此无法获取到填充后的真实链接。

两种可行解决方法

方法1:直接请求后端数据接口(推荐,效率更高)

这种方法跳过页面渲染步骤,直接拉取后端返回的结构化JSON数据,不需要启动浏览器,速度快、资源占用低。
操作逻辑:

  • 打开浏览器控制台(F12)切换到「网络」标签,筛选「Fetch/XHR」类型的请求,刷新页面后找到返回文章列表数据的接口
  • 用httr包模拟请求该接口,解析JSON后直接提取链接字段
    示例代码:
library(httr)
library(jsonlite)

# 构造接口请求,take参数可调整单次返回的文章数量
res <- GET("https://politi.dk/api/newssearch/", query = list(
  query = "",
  t = "Doegnrapport",
  page = 0,
  take = 20
))

# 解析json响应数据
data <- fromJSON(content(res, as = "text"))
# 拼接域名得到完整可访问链接
full_links <- paste0("https://politi.dk", data$results$url)
print(full_links)

方法2:使用无头浏览器渲染页面后抓取

如果无法定位到数据接口,可以用支持JS执行的无头浏览器工具加载页面,等渲染完成后再用rvest抓取元素,推荐使用轻量的chromote包,无需配置复杂的Selenium环境。
示例代码:

library(chromote)
library(rvest)

# 启动无头浏览器
b <- ChromoteSession$new()
# 加载目标页面
b$Page$navigate("https://politi.dk/doegnrapporter")
# 等待页面渲染完成,等待时长可根据网络情况调整
Sys.sleep(2)
# 获取渲染后的完整HTML源码
html <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value
# 关闭浏览器进程
b$close()

# 用rvest正常解析渲染后的源码
page <- read_html(html)
t <- page %>% html_nodes("a.newsResultLink") %>% html_attr('href')
full_links <- paste0("https://politi.dk", t)
print(full_links)

注意事项

  • 爬取时控制请求频率,避免对目标网站服务器造成过大压力
  • 接口参数中的page可以调整分页,拉取更多历史报告数据
  • 如果接口触发反爬限制,可以在GET请求中添加user-agent请求头模拟正常浏览器访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:30:04