Вам не нужно , чтобы использовать RSelenium . Вы можете очистить этот конкретный сайт, используя rvest и httr, но это немного сложно. Вам необходимо научиться отправлять формы в http-запросах. Это требует небольшого изучения лежащих в основе html и http-запросов, отправляемых вашим веб-браузером.
В вашем случае форма на самом деле довольно проста. Он имеет только два поля: поле command
, которое всегда равно "doSelect", и поле displayObject.id
, которое является уникальным числом для каждого элемента выбора, полученное из атрибутов "value" тегов "option" в html.
Вот как мы можем посмотреть на выпадающие списки и связанные с ними идентификаторы:
library(tidyverse)
library(rvest)
library(httr)
url <- "http://www.ahw.gov.ab.ca/IHDA_Retrieval/"
paste0(url, "ihdaData.do") %>%
GET() %>%
read_html() %>%
html_node('#content > div > p:nth-child(8) > a') %>%
html_attr("href") %>%
{paste0(url, .)} %>%
GET() %>%
read_html() %>%
html_node('#content > div > table:nth-child(3) > tbody > tr:nth-child(10) > td > a') %>%
html_attr("href") %>%
{paste0(url, .)} %>%
GET() %>%
read_html() -> page
pages <- tibble(id = page %>% html_nodes("option") %>% html_attr("value"),
item = page %>% html_nodes("option") %>% html_text())
pages <- pages[which(pages$item != ""), ]
Это дает нам список доступных элементов на странице:
pages
#> # A tibble: 8 x 2
#> id item
#> <chr> <chr>
#> 1 724 Human Immunodeficiency Virus (HIV) Incidence Rate (Age Specific)
#> 2 723 Human Immunodeficiency Virus (HIV) Incidence Rate (by Geography)
#> 3 886 Human Immunodeficiency Virus (HIV) Proportion (Ethnicity)
#> 4 887 Human Immunodeficiency Virus (HIV) Proportion (Exposure Cateogory)
#> 5 719 Notifiable Diseases - Age-Sex Specific Incidence Rate
#> 6 1006 Sexually Transmitted Infections (STI) - Age-Sex Specific Case Counts (P~
#> 7 466 Sexually Transmitted Infections (STI) - Age-Sex Specific Rates of Repor~
#> 8 1110 Sexually Transmitted Infections (STI) - Quarterly Congenital Syphilis C~
Теперь, если мы хотим выбрать первый, мы просто публикуем список с необходимыми параметрами по правильному URL, который вы можете найти, проверив консоль разработчика в вашем браузере (F12 в Chrome, Firefox или IE). В данном случае это относительный URL "selectSubCategory.do"
params <- list(command = "doSelect", displayObject.id = pages$id[1])
next_page <- POST(paste0(url, "selectSubCategory.do"), body = params)
Так что теперь next_page
содержит html страницы, которую вы искали. К сожалению, в данном случае это еще одна раскрывающаяся страница выбора.
Надеемся, что, следуя приведенным выше методам, вы сможете перемещаться по страницам достаточно хорошо, чтобы получить необходимые данные.