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

无法获取网页完整源码,如何用R提取目标网页PDF链接?

解决动态页面的PDF链接提取问题

我之前也踩过这个坑!这个网站的PDF链接是通过JavaScript动态渲染出来的——你在Chrome开发者工具里看到的内容,是浏览器执行页面JS后生成的最终结果,但rvest、RCurl这类工具默认只会抓取服务器返回的原始静态HTML,不会执行任何JavaScript,所以自然拿不到那些隐藏的PDF链接。

下面给你两种可行的解决方案,优先推荐第一种,操作更直观:

方法1:用RSelenium模拟真实浏览器加载

RSelenium能模拟Chrome、Firefox等浏览器的完整行为,让页面把所有动态内容都加载出来,之后再抓取源码就和你在开发者工具里看到的一样了。

步骤:

  1. 先安装并加载RSelenium包:
install.packages("RSelenium")
library(RSelenium)
  1. 启动Chrome浏览器驱动(注意:你需要先下载和自己Chrome版本匹配的ChromeDriver,并且配置好环境变量,或者在启动时指定驱动路径):
# 启动Chrome驱动,端口可以自己选一个未被占用的
driver <- rsDriver(browser = "chrome", port = 4567L, chromever = "匹配你的Chrome版本号")
remDr <- driver[["client"]]
  1. 访问目标页面,给页面留一点加载时间,确保JS执行完毕:
remDr$navigate("http://www.oabmg.org.br/examedeordem/home/index")
# 等待3秒,根据网络情况可以调整时间
Sys.sleep(3)
  1. 获取完整的页面源码,再用rvest解析提取PDF链接:
# 获取渲染后的完整页面源码
page_source <- remDr$getPageSource()[[1]]
library(rvest)
page <- read_html(page_source)

# 提取所有指向PDF的链接
pdf_links <- page %>% 
  html_elements("a[href$='.pdf']") %>% 
  html_attr("href")

# 把相对链接补全成完整URL
pdf_links <- paste0("http://www.oabmg.org.br", pdf_links)

# 查看结果
print(pdf_links)
  1. 用完记得关闭浏览器和驱动,避免占用资源:
remDr$close()
driver$server$stop()

方法2:用V8引擎直接执行页面JS(进阶)

如果不想依赖浏览器驱动,也可以尝试用V8引擎直接运行页面中的JavaScript代码,生成动态内容。不过这个方法需要你分析页面的JS逻辑,找到生成PDF链接的代码段,门槛稍高:

  1. 安装并加载V8包:
install.packages("V8")
library(V8)
  1. 先抓取原始静态HTML,提取页面中的JS脚本:
library(httr)
response <- GET("http://www.oabmg.org.br/examedeordem/home/index")
html_content <- content(response, "text")

# 提取页面中所有的JS脚本
js_scripts <- read_html(html_content) %>% 
  html_elements("script") %>% 
  html_text()
  1. 找到生成PDF链接的JS代码段,用V8执行并提取数据:
# 初始化V8上下文
ctx <- v8()

# 把找到的目标JS代码传入上下文执行(需要你自己定位对应的脚本)
ctx$eval(js_scripts[你找到的脚本索引])

# 从V8上下文中提取生成的链接数据(这一步需要分析JS变量名)
pdf_links <- ctx$get("存储链接的变量名")

这个方法适合JS逻辑比较简单的场景,如果网站的JS做了混淆或者加密,就很难生效,所以还是更推荐RSelenium的方案。

注意事项:

  • ChromeDriver的版本必须和你的Chrome浏览器版本完全匹配,不然会启动失败,你可以在Chrome的「关于」页面查看版本,然后去官方下载对应版本的驱动。
  • 如果网站有反爬机制,可以尝试给请求添加自定义请求头,或者延长等待时间,模拟真实用户的访问节奏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:21:18