如果这是非常基本的话,请在高级中道歉,但我迷失了!
我想在R中删除下表,
http://dgsp.cns.gob.mx/Transparencia/wConsultasGeneral.aspx
但是,我相信这个页面是用Java编写的。我尝试使用RSelenium,但是我没有成功地抓住这张桌子的17页。
你能否告诉我如何抓取这张桌子的全部内容?
答案 0 :(得分:0)
鉴于它只有17页,我会手动点击页面并保存HTML源代码。这种方式不会超过3-5分钟。
但是,如果你想以编程方式进行,我们可以先编写一个带有页码的函数,查找该页面的链接,点击链接,然后返回该页面的HTML源代码:
get_html <- function(i) {
webElem <- remDr$findElement(using = "link text", as.character(i))
webElem$clickElement()
Sys.sleep(s)
remDr$getPageSource()[[1]]
}
初始化一些值:
s <- 2 # seconds to wait between each page
total_pages <- 17
html_pages <- vector("list", total_pages)
启动浏览器,导航到第1页,然后保存来源:
library(RSelenium)
rD <- rsDriver()
remDr <- rD[["client"]]
base_url <- "http://dgsp.cns.gob.mx/Transparencia/wConsultasGeneral.aspx"
remDr$navigate(base_url)
src <- remDr$getPageSource()[[1]]
html_pages[1] <- src
对于第2页到第17页,我们使用for循环并调用我们上面写的函数,特别注意第11页:
for (i in 2:total_pages) {
if (i == 11) {
webElem <- remDr$findElement(using = "link text", "...")
webElem$clickElement()
Sys.sleep(s)
html_pages[i] <- remDr$getPageSource()[[1]]
} else {
html_pages[i] <- get_html(i)
}
}
remDr$close()
结果是html_pages
,一个长度为17的列表,每个元素都是每个页面的HTML源代码。如何将HTML中的数据解析成其他形式(例如数据帧)本身可能是一个单独的问题。