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

时间:2019-04-02 17:03:49

标签: r web-scraping rvest rselenium

我知道有很多资源/问题可以解决这个问题,但是我已经尝试了好几天,而且似乎无法弄清楚。我以前曾在网上抓过网站,但这是我的问题。

网站: 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专业人士,所以我不确定。任何帮助/指导将不胜感激!

1 个答案:

答案 0 :(得分: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