Утилизация объекта класса tbody в R - PullRequest
0 голосов
/ 12 марта 2020

Я совершенно новичок в удалении веб-страниц с помощью R, и я хотел бы удалить следующую таблицу (изображение), которая ведет себя как tbody. Если я запускаю следующий код, я вижу только заголовки без данных (веб-сайт на чешском языке).

Я должен получить время, цену, объем и объем в чешских кронах за размещенные там заказы.

library(rvest)
library(dplyr)

PSE_Page <- "https://www.pse.cz/detail/CZ0003519753?tab=detail-trading-data" 
Page <- read_html(PSE_Page)

Our_table <- Page %>% 
  rvest::html_nodes('body') %>% 
  xml2::xml_find_all("//div[contains(@class, 'stock-table large-table small-text page-block-negative-margin table-container js-swipe-icon')]") %>% 
  rvest::html_text()

Our_table

Вывод: 1"\ n Час \ n Сена \ n Celkový objem \ n Celkový objem \ n **

Может ли кто-нибудь помочь? Большое спасибо !!!

enter image description here

1 Ответ

1 голос
/ 13 марта 2020

Таблица, на которую вы ссылаетесь, не является таблицей c. Это Dynami c, так как вы можете использовать его, например, сортировать таблицу. Таким образом, вы не можете очистить информацию с помощью rvest. Я действительно не специалист по динамическому анализу веб-страниц, но этот фрагмент кода извлекает данные. Я использую веб-браузер через пакет RSelenium, которым можно управлять изнутри R, чтобы получать динамическое содержимое этой таблицы. Хотя, вероятно, есть гораздо лучшие решения для этой работы.

library(RSelenium)
library(dplyr)

rD <- rsDriver(browser = "firefox", port = 8787L)
remDr <- rD$client
remDr$navigate("https://www.pse.cz/detail/CZ0003519753?tab=detail-trading-data")
page <- XML::htmlParse(remDr$getPageSource()[[1]])

remDr$close()

header <- XML::xpathSApply(page, "/html/body/div[8]/div[2]/div/div[2]/div[3]/div/div/table/thead", XML::xmlValue)
table <- XML::xpathSApply(page, "/html/body/div[8]/div[2]/div/div[2]/div[3]/div/div/table/tbody", XML::xmlValue)

header <- read.table(text=header, sep = "\n", strip.white = T) %>% unlist %>% as.character()
body <- read.table(text=table, sep = "\n", strip.white = T) 
header[3] <- "Total Turnover pcs"
header[4] <- "Total Turnover CZK"

data.frame(lapply(split(body$V1, paste(header)), as.character))

#     Price     Time Total.Turnover.CZK Total.Turnover.pcs
# 1 95,00 % 12:00:25     CZK 780,333.33        800,000 pcs
# 2 95,00 % 12:00:08     CZK 292,625.00        300,000 pcs
# 3 95,00 % 12:00:08     CZK 195,083.33        200,000 pcs


...