我知道有很多资源/问题可以解决这个问题,但我已经尝试了好几天,似乎无法弄明白。我之前有过webscraped网站,但这个网站给我带来了问题。
网站:njaqinow.net
我想要抓取的内容:我想在“当前状态” - >“污染物”标签下刮取表格。我希望每次更新表时都会将其删除,这样我就可以在我正在创建的闪亮应用程序中使用此信息。
我尝试过:我尝试了很多不同的方法,但为了简单起见,我将展示我最近的方法:
library("rvest")
url<-"http://www.njaqinow.net"
webpage <- read_html(url)
test<-webpage%>%
html_node("table")%>%
html_table()
我的猜测是,这比我原先想的要复杂得多,因为在我看来桌子在一个框架内。我不是一个javascript / HTML专业版,所以我不完全确定。任何帮助/指导将不胜感激!
我可以用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