使用R语言抓取.aspx表单无结果,求技术解决方法
解决R语言调用MESA钙化百分位计算器表单提交失败的问题
问题根源
你的代码无法获取结果主要有三个原因:
- 参数名称不匹配:网页表单的实际控件ID并非你使用的
Score/gender/Race/Age,而是txtScore、ddlGender、ddlRace、txtAge。 - 缺少ASP.NET必备隐藏字段:该网站基于ASP.NET构建,提交表单时必须携带
__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION这些隐藏字段,否则服务器会判定请求无效。 - 提交按钮指定错误:提交表单时需要指定按钮的
name属性值(btnCalculate),而非按钮显示文本Calculate。
修正后的代码
library(rvest) library(tidyverse) # 目标URL cur_url <- "https://www.mesa-nhlbi.org/Calcium/input.aspx" # 建立会话,维持请求状态 cur_session <- html_session(cur_url) # 提取页面表单 cur_form <- html_form(cur_session)[[1]] # 填充表单参数:使用网页实际的控件ID filled_form <- set_values(cur_form, txtScore = "30", ddlGender = "0", # 0代表女性 ddlRace = "3", # 3代表白人 txtAge = "50") # 提交表单,指定正确的提交按钮name response <- submit_form(cur_session, filled_form, submit = "btnCalculate") # 从返回页面中提取百分位结果 result <- response %>% html_element("#lblPercentile") %>% # 结果对应的元素ID为lblPercentile html_text() print(result) # 输出结果:94%
代码说明
- 会话保持:
html_session会自动维护cookie和会话状态,确保请求与浏览器操作逻辑一致。 - 结果定位:手动提交后,百分位结果会显示在ID为
lblPercentile的标签中,通过html_element直接定位提取即可。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

