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

RStudio中抓取无指定URL的央行贸易进出口数据的技术问题

解决RStudio中抓取需手动筛选的动态贸易数据问题

我经常帮人处理这类动态数据抓取的需求,给你一套实用的解决思路,亲测有效:

第一步:拆解页面的动态请求逻辑

当你在网页上手动选择年份、月份等筛选条件并提交时,浏览器其实是在后台向服务器发送了特定请求(大多是POST请求)。你需要用浏览器开发者工具捕获这个关键请求:

  • 打开目标网站,按F12调出开发者工具,切换到「网络」标签页
  • 清空现有请求记录,然后手动完成一次筛选+查询操作
  • 在请求列表里找带api/data/query关键词的请求,或者方法为POST的请求,这就是获取数据的核心接口
  • 查看这个请求的表单参数(Form Data里的键值对,对应你选的筛选条件)、请求头,以及返回的响应格式(JSON/CSV/Excel等)

第二步:在R中模拟发送请求

拿到请求细节后,就可以用R的工具包模拟这个请求,直接获取数据:

  • 如果返回JSON格式,用httr+jsonlite组合:
    library(httr)
    library(jsonlite)
    
    # 构造筛选参数,对应你捕获到的Form Data内容
    request_params <- list(
      year = "2024",
      month = "05",
      trade_type = "import", # 对应进口/出口的筛选值
      sector = "all"
    )
    
    # 替换成你捕获到的真实API地址
    response <- POST(url = "http://www.bcr.gob.sv/trade-api-endpoint",
                     body = request_params,
                     encode = "form")
    
    # 解析响应为数据框
    trade_data <- fromJSON(content(response, "text"))
    
  • 如果返回CSV/Excel文件,直接保存响应内容再读取:
    # 保存响应为本地文件
    writeBin(content(response, "raw"), "salvador_trade_data.csv")
    # 读取数据
    trade_data <- read.csv("salvador_trade_data.csv")
    

第三步:处理会话验证或反爬限制

有些网站会验证用户会话(比如Cookie),这时候需要把浏览器捕获到的Cookie加入请求头:

# 从开发者工具中复制Cookie内容,替换成实际值
custom_headers <- add_headers(Cookie = "session_id=xxx; user_token=yyy")
response <- POST(url = "目标API地址",
                 body = request_params,
                 encode = "form",
                 headers = custom_headers)

第四步:应对纯JavaScript渲染的页面

如果网站是用React/Vue等框架动态渲染数据,没有直接的API接口,就用RSelenium模拟真实浏览器操作:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前配置Selenium环境,或用Docker简化)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 打开目标数据页面
remDr$navigate("http://www.bcr.gob.sv/你的目标页面路径")

# 模拟选择年份:点击下拉框并输入2024
year_dropdown <- remDr$findElement(using = "css", value = "#year-select")
year_dropdown$sendKeysToElement(list("2024"))

# 模拟点击查询按钮
submit_button <- remDr$findElement(using = "css", value = "#submit-btn")
submit_button$clickElement()

# 等待页面加载完成,抓取表格数据
Sys.sleep(3) # 根据页面加载速度调整等待时间
page_html <- remDr$getPageSource()[[1]]
trade_data <- read_html(page_html) %>% html_table(fill = TRUE)

# 关闭浏览器会话
remDr$close()
driver$server$stop()

重要提醒

  • 务必遵守目标网站的robots.txt规则和使用条款,不要高频发送请求给服务器造成压力
  • 如果遇到加密的参数值,需要仔细分析请求中参数和你手动选择值的对应关系
  • 部分网站有IP封禁机制,必要时可以添加请求延迟或使用代理

内容的提问来源于stack exchange,提问作者The-Dancing-Machine-Learning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:46:47