这里是网络抓取新手... 类似的问题已发布(并已回答),但我似乎无法成功申请 我正在尝试循环数据集并使用以下在线计算器获得一些分数(动脉粥样硬化的百分位数):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 中得到任何相关结果 任何有关此事的帮助将不胜感激..
如果您在浏览器(例如,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"