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

如何用R的httr::GET/POST正确请求网页提取信息栏链接?

解决R语言爬取Swissmedic页面「信息」栏链接的问题

问题背景

  • 目标:从https://fsca.swissmedic.ch/mep/#/页面的「信息」栏目提取链接
  • 当前路径:空搜索导出的CSV不含所需链接,计划用CSV中的唯一标识(如Vk_20220224_16)拼接成详情页URL(https://fsca.swissmedic.ch/mep/#/?q=Vk_20220224_16)爬取
  • 遇到的障碍:
    • httr::GET(url)返回400 Bad Request,推测缺少服务器要求的参数
    • 改用httr::POST后仅得到「Loading...」文本,无法获取实际页面内容或表格

解决方法

1. 排查服务器所需参数(通过浏览器抓包)

该网站是单页应用(SPA),直接请求页面URL只能拿到未渲染的框架,真实数据通过后台API加载。用Firefox抓包步骤:

  • 打开目标详情页,按F12调出开发者工具
  • 切换到「网络」标签,刷新页面
  • 筛选「XHR/Fetch」类型请求,找到返回实际数据的API接口
  • 查看该请求的请求方法、请求头(比如User-Agent、Referer)、请求参数(比如包含唯一标识的q参数),这些就是服务器要求的参数

2. 直接调用API获取结构化数据

跳过页面渲染,直接请求API接口更高效,示例代码:

library(httr)
library(jsonlite)

# 替换为抓包得到的真实API地址
api_url <- "https://fsca.swissmedic.ch/mep/api/xxx"

# 复制抓包得到的请求头,关键字段需保留
request_headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0",
  "Referer" = "https://fsca.swissmedic.ch/mep/#/",
  "Accept" = "application/json"
)

# 替换为抓包得到的参数,包含目标唯一标识
request_params <- list(
  q = "Vk_20220224_16",
  # 补充其他必要参数,如分页、筛选条件等
)

# 发送请求并解析JSON数据
response <- GET(api_url, request_headers, query = request_params)
raw_data <- content(response, "text") %>% fromJSON()

# 从JSON结构中提取「信息」栏链接(需根据实际返回路径调整)
info_links <- raw_data$data$info_section$links

3. 模拟浏览器渲染(API无法定位时的备选方案)

如果API难以抓取,用RSelenium模拟浏览器加载页面后提取内容:

library(RSelenium)
library(rvest)

# 启动Chrome驱动(需提前安装Chrome和对应版本的chromedriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标详情页
remDr$navigate("https://fsca.swissmedic.ch/mep/#/?q=Vk_20220224_16")

# 等待页面完全加载(可根据页面加载速度调整时长)
Sys.sleep(5)

# 获取渲染后的HTML并提取链接
page_source <- remDr$getPageSource()[[1]] %>% read_html()
info_links <- page_source %>% html_elements(".info-section a") %>% html_attr("href")

# 关闭浏览器和驱动
remDr$close()
driver$server$stop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:35:18