【问题标题】:Scraping tbody class object in R在 R 中抓取 tbody 类对象
【发布时间】:2020-03-12 20:49:50
【问题描述】:

我对使用 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 Čas\n Cena\n Celkový objem\n Celkový objem\n **

有人可以帮忙吗?非常感谢!!!

【问题讨论】:

  • 不清楚您要提取哪个表。您能否编辑您的帖子以包含网站的屏幕截图并突出显示您感兴趣的部分?
  • 当我转到pse.cz/detail/CZ0003519753?tab=detail-trading-data 时,我在任何地方都看不到那张桌子。你能澄清一下吗?笼统地说:如果您处理评论(并编辑您的帖子),通常对留下原始评论的人进行 ping 操作会有所帮助。如果您在@MauritsEvers 的评论中联系我,我会收到通知;这使得及时沟通变得容易得多。
  • @MauritsEvers 好的,谢谢。
  • 仍然不清楚你指的是哪个表。如果我访问您提供的网站,我看不到任何类似于您显示的内容。我错过了什么吗?
  • @MauritsEvers 如果你去底部,它是这个页面左边的底部表格:pse.cz/detail/CZ0003519753?tab=detail-trading-data

标签: r web-scraping dplyr rvest rselenium


【解决方案1】:

您所指的表格不是静态表格。它是动态的,因为您可以使用它进行迭代,例如对表格进行排序。所以你不能用 rvest 抓取信息。我真的不是动态网页抓取方面的专家,但这段代码 sn-p 提取数据。我通过可以从 R 中控制的 RSelenium 包使用 Web 浏览器来接收该表的动态内容。不过,可能有更好的解决方案来完成这项工作。

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


【讨论】:

  • 嗨@satesrah,感谢您的建议,问题是,这完全错过了带有时间戳的表格,我无法通过此解决方案检索它:((我的意思是 12:00 的表格: 13, 95% 500 000 ks, 487 638,89 Kč ...). 可能是表4无法通过解决方案加载?
  • @Michael 抱歉,我不清楚你指的是哪张桌子。这使它有点复杂,但我更新了我的答案。
  • 最近,它说我没有java开发工具包。你有没有偶然遇到这个@satesrah?
  • @Michael 你可以google一下如何在macOS上安装JDK。
【解决方案2】:

图书馆(tidyverse) 图书馆(rvest)

为此 xpath='html/body/div[1]/table/tbody/tr'

我只是跳过 xpath 中的 tbody

标题

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2018-07-04
  • 2021-08-12
  • 2011-08-15
  • 2018-07-17
相关资源
最近更新 更多