2014-02-05 77 views
2

我已經設法爲單個網址刮取內容,但我正在努力將其自動化爲多個Url。使用r自動化網頁掃描

這是怎樣的一個頁面完成:

library(XML); library(data.table) 
theurl <- paste("http://google.com/",url,"/ul",sep="") 
convertUTF <- htmlParse(theurl, encoding = "UTF-8") 
tables <- readHTMLTable(convertUTF) 
n.rows <- unlist(lapply(tables, function(t) dim(t)[1])) 
table <- tables[[which.max(n.rows)]] 
TableData <- data.table(table) 

現在我有URL的載體,希望刮每個相應表:

在這裏,我的數據,包括多讀HTTP鏈接:

ur.l <- data.frame(read.csv(file.choose(), header=TRUE, fill=TRUE)) 

theurl <- matrix(NA, nrow=nrow(ur.l), ncol=1) 
for(i in 1:nrow(ur.l)){ 
    url <- as.character(ur.l[i, 2]) 
    } 
+0

而不是在這裏使用'file.choose',你應該包括一個簡短的例子你的網址向量。 – jbaums

回答

1

每次您提供的三個額外的URL是指不包含表的頁面,所以它不是一個特別有用的例子的數據集。但是,處理錯誤的簡單方法是使用tryCatch。在下面,我定義了一個函數,它從url u中讀取表格,計算該URL處每個表格的行數,然後返回行數最多的表格作爲data.table

然後,您可以使用sapply將此函數應用於向量中的每個URL(或者,對於您的情況,每個組織ID,例如36245119)。

library(XML); library(data.table) 
scrape <- function(u) { 
    tryCatch({ 
    tabs <- readHTMLTable(file.path("http://finstat.sk", u, "suvaha"), 
          encoding='utf-8') 
    tab <- tabs[[which.max(sapply(tabs, function(x) nrow(x)))]] 
    data.table(tab) 
    }, error=function(e) e) 
} 

urls <- c('36245119', '46894853', '46892460', '46888721') 
res <- sapply(urls, scrape) 

如果您想改善錯誤處理,請查看?tryCatch。目前該函數只是簡單地返回錯誤。