Вычистить нумерованный стол в R - PullRequest
0 голосов
/ 28 мая 2018

Извиняюсь заранее, если это очень просто, но я заблудился!

Я хочу почистить следующую таблицу в R,

http://dgsp.cns.gob.mx/Transparencia/wConsultasGeneral.aspx

Однако эта страница написана, по-моему, на Java.Я пробовал с RSelenium, но мне не удалось очистить 17 страниц этой таблицы.

Не могли бы вы дать мне подсказку о том, как очистить все содержимое этой таблицы?

1 Ответ

0 голосов
/ 28 мая 2018

Учитывая, что это всего 17 страниц, я бы вручную нажимал на страницы и сохранял исходный код HTML.Это займет не более 3-5 минут.

Однако, если вы хотите сделать это программно, мы можем начать с написания функции, которая берет номер страницы, находит ссылку для этой страницы, нажимает на ссылку и возвращает источник HTML для этой страницы:

get_html <- function(i) {
  webElem <- remDr$findElement(using = "link text", as.character(i))
  webElem$clickElement()
  Sys.sleep(s)
  remDr$getPageSource()[[1]]
}

Инициализируйте некоторые значения:

s <- 2 # seconds to wait between each page
total_pages <- 17
html_pages <- vector("list", total_pages)

Запустите браузер, перейдите на страницу 1 и сохраните источник:

library(RSelenium)
rD <- rsDriver()
remDr <- rD[["client"]]
base_url <- "http://dgsp.cns.gob.mx/Transparencia/wConsultasGeneral.aspx"
remDr$navigate(base_url)
src <- remDr$getPageSource()[[1]]
html_pages[1] <- src

Для страниц со 2 по 17мы используем цикл for и вызываем функцию, которую мы написали выше, заботясь об учете специально для страницы 11:

for (i in 2:total_pages) {
  if (i == 11) {
    webElem <- remDr$findElement(using = "link text", "...")
    webElem$clickElement()
    Sys.sleep(s)
    html_pages[i] <- remDr$getPageSource()[[1]]
  } else {
    html_pages[i] <- get_html(i)  
  }
}
remDr$close()

В результате получается html_pages, список длиной 17, с каждым элементомHTML источник для каждой страницы.Как разобрать данные из HTML в какую-то другую форму (например, в фрейм данных), вероятно, отдельный вопрос.

...