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

使用rvest提交表单下载CSV遇HTTP 500错误,求解决方案

解决ANBIMA网站CSV下载的爬虫问题

问题根源

你遇到的HTTP 500错误和主机解析失败,核心原因是:

  • 该页面的表单提交依赖VerificaSubmit() JavaScript函数做预处理(比如验证日期格式、添加隐藏参数、动态修改表单提交路径),而rvest本身无法执行JS,直接提交表单会缺失必要参数或格式不符合要求。
  • read_html_live的错误是因为表单的action是相对路径或JS生成的,工具未正确补全完整URL导致解析失败。

能不能只用rvest解决?

可以,但需要手动模拟JS的预处理逻辑,步骤如下:

  1. 分析JS函数逻辑:打开目标页面源码,找到VerificaSubmit()函数,查看它的具体操作:
    • 是否验证日期格式(比如确保Dt_Ref是DD/MM/YYYY格式)
    • 是否添加了ASP.NET常见的隐藏参数(如__VIEWSTATE、__EVENTVALIDATION)
    • 是否修改了表单的提交路径(比如把action改成CZ.asp这类相对路径,需要补全为完整URL)
  2. 手动构造完整请求:
    library(rvest)
    library(httr)
    
    url <- 'https://www.anbima.com.br/informacoes/est-termo/default.asp'
    sess <- session(url)
    page <- read_html(sess)
    
    # 提取ASP.NET页面的隐藏字段
    viewstate <- page %>% html_element("#__VIEWSTATE") %>% html_attr("value")
    eventvalidation <- page %>% html_element("#__EVENTVALIDATION") %>% html_attr("value")
    
    # 构造所有提交参数,包含JS处理后的必要项
    form_data <- list(
      escolha = 2,
      Idioma = "PT",
      saida = "csv",
      Dt_Ref = "13/06/2024",
      __VIEWSTATE = viewstate,
      __EVENTVALIDATION = eventvalidation,
      __VIEWSTATEGENERATOR = page %>% html_element("#__VIEWSTATEGENERATOR") %>% html_attr("value"),
      submit = "Enviar" # 对应表单提交按钮的名称
    )
    
    # 提交请求,注意补全表单action的完整URL
    resp <- session_post(sess, url = "https://www.anbima.com.br/informacoes/est-termo/CZ.asp", body = form_data, encode = "form")
    
    # 保存CSV文件
    writeBin(resp$content, "anbima_data.csv")
    

如果手动模拟太麻烦,用支持JS的工具

如果不想花时间分析JS逻辑,直接用能模拟浏览器执行JS的R包,比如playwright或RSelenium,操作更直观:
示例(用playwright):

library(playwright)

# 初始化浏览器
pw <- playwright$launch()
browser <- pw$chromium$launch(headless = FALSE) # 非无头模式可查看操作过程
page <- browser$new_page()

# 打开目标页面
page$goto("https://www.anbima.com.br/informacoes/est-termo/default.asp")

# 填写表单
page$select_option("#escolha", value = "2")
page$select_option("#Idioma", value = "PT")
page$select_option("#saida", value = "csv")
page$fill("#Dt_Ref", "13/06/2024")

# 提交表单(自动触发JS验证函数)
page$click("input[type='submit']")

# 等待下载完成并保存
download <- page$wait_for_download()
download$save_as("anbima_data.csv")

# 关闭浏览器
browser$close()
pw$stop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:23