R:网页抓取 .aspx 表单 - 没有结果

问题描述 投票:0回答:1

这里是网络抓取新手... 类似的问题已发布(并已回答),但我似乎无法成功申请 我正在尝试循环数据集并使用以下在线计算器获得一些分数(动脉粥样硬化的百分位数):https://www.mesa-nhlbi.org/Calcium/input.aspx (例如插入分数= 30,性别= 0(女性),种族= 3(白人),年龄= 50将得到94%)

但是我似乎无法得到任何与计算器手动执行相匹配的结果 - 这是我的代码: (+提前致谢!!)

#if(!require("devtools"))
#install.packages("devtools")
#devtools::install_github("omegahat/RHTMLForms")
#install.packages("XML")

library(XML)
library(RCurl)
library(httr)
library(tidyverse)
library(RHTMLForms)
(https://stackoverflow.com)library(rvest)

cur_url <- "https://www.mesa-nhlbi.org/Calcium/input.aspx/"
cur_session <- html_session(cur_url)

cur_Form <- html_form(cur_session)

cur_fill <- set_values(cur_Form[[1]],
                   Score = '30',
                   gender='0',
                   Race ='3',
                   Age='50')

cur_set <- submit_form(cur_session, cur_fill,submit = "Calculate")
content(cur_set$response)

使用 rvest 库,我已将 url 读入“html_session”变量并提取表单 通过“html_form”

cur_url <- "https://www.mesa-nhlbi.org/Calcium/input.aspx/"
cur_session <- html_session(cur_url)
cur_Form <- html_form(cur_session)

使用set_values函数更新相关字段,然后使用submit_form执行-

cur_fill <- set_values(cur_Form[[1]], Score = '30',gender='0',Race ='3',Age='50')
cur_set <- submit_form(cur_session, cur_fill,submit = "Calculate")

但是我似乎没有在 cur_set veriable 中得到任何相关结果 任何有关此事的帮助将不胜感激..

r forms web-scraping rvest
1个回答
0
投票

如果您在浏览器(例如,firefox、chrome)中查看网页并启用开发控制台,您可以看到某些

id
字段,这将有助于确定您需要什么。

首先,

rvest
(我使用的是 1.0.3)已弃用了您正在使用的几个函数。我相信它现在可以按原样工作,但我正在使用推荐的功能:

  • session()
    代替
    html_session()
  • html_form_set()
    代替
    set_values()
  • session_submit()
    代替
    submit_form()
library(rvest)
cur_url <- "https://www.mesa-nhlbi.org/Calcium/input.aspx/"
cur_session <- session(cur_url)
cur_Form <- html_form(cur_session)
cur_fill <- html_form_set(cur_Form[[1]], Score = '30',gender='0',Race ='3',Age='50')
cur_set <- session_submit(cur_session, cur_fill,submit = "Calculate")

您可以从中获得各种东西:

html_table(cur_set)
# [[1]]
# # A tibble: 2 × 4
#   X1    X2    X3    X4   
#   <chr> <chr> <chr> <chr>
# 1 25th  50th  75th  90th 
# 2 0     0     0     8    

从开发浏览器中,我们找到了特定区域,特别是

scoreLabel
(30) 和其他:

类似地,

percLabel
(90) 和
Label10
(
"16 %."
)。

由此

html_nodes(cur_set, "#Label10") %>%
  html_text()
# [1] "16 %."
html_nodes(cur_set, "#scoreLabel") %>%
  html_text()
# [1] "30"
html_nodes(cur_set, "#percLabel") %>%
  html_text()
# [1] "94"
© www.soinside.com 2019 - 2024. All rights reserved.