使用rvest或RSelenium在框架内创建自动webscrape表

问题描述 投票:1回答:1

我知道有很多资源/问题可以解决这个问题,但我已经尝试了好几天,似乎无法弄明白。我之前有过webscraped网站,但这个网站给我带来了问题。

网站:njaqinow.net

我想要抓取的内容:我想在“当前状态” - >“污染物”标签下刮取表格。我希望每次更新表时都会将其删除,这样我就可以在我正在创建的闪亮应用程序中使用此信息。

enter image description here

我尝试过:我尝试了很多不同的方法,但为了简单起见,我将展示我最近的方法:

    library("rvest")
url<-"http://www.njaqinow.net"
webpage <- read_html(url)

test<-webpage%>%
  html_node("table")%>%
  html_table()

我的猜测是,这比我原先想的要复杂得多,因为在我看来桌子在一个框架内。我不是一个javascript / HTML专业版,所以我不完全确定。任何帮助/指导将不胜感激!

r web-scraping rvest rselenium
1个回答
2
投票

我可以用RSelenium提供解决方案。我会告诉你如何导航到该表并获取其内容。为了格式化表格内容,我提供了另一个问题的链接,但不在此答案的范围内。

我认为你有两个挑战。切换到帧并在帧之间切换。切换到框架由remDr$switchToFrame()完成。

这里讨论帧之间的切换:https://github.com/ropensci/RSelenium/issues/155。在你的情况下:

remDr$switchToFrame("contents")
...
remDr$switchToFrame(NA)
remDr$switchToFrame("contentsi")

完整代码如下:

remDr$navigate("http://www.njaqinow.net")
frame1 <- remDr$findElement("xpath", "//frame[@id = 'contents']")
remDr$switchToFrame(frame1)
remDr$findElement("xpath", "//*[text() = 'Current Status']")$clickElement()
remDr$findElement("xpath", "//*[text() = 'POLLUTANTS']")$clickElement()

remDr$switchToFrame(NA)
remDr$switchToFrame("contentsi")
table <- remDr$findElement("xpath", "//table[@id = 'C1WebGrid1']")
table$getElementText()

要格式化表格,您可以在这里查看:scraping table with R using RSelenium

© www.soinside.com 2019 - 2024. All rights reserved.