2011-09-21 142 views
-2

從HTML網站的HTML表格中刮取數據是很酷且容易的。但是,如果網站沒有用html編寫,並且需要瀏覽器顯示相關信息,我該如何執行此任務如果它是一個asp網站或數據不在代碼中,但通過java代碼進來?用R刮非html網站?

喜歡的話就在這裏:http://www.bwea.com/ukwed/construction.asp

使用VBA Excel的一個可以寫,打開一個功能,IE會調用網站,然後基本上覆制和粘貼網站的內容。有沒有機會做類似於R的事情?

+5

它仍然正在傳送HTML,所以從客戶的角度來看,不應該有靜態和動態創建的頁面之間的任何差別。 – Thomas

+1

這個問題的前提並不是事實。它需要被編輯。 – adamleerich

回答

1

托馬斯評論道,該網站只提供HTML。有些網站使用JavaScript通過AJAX調用獲取值並將它們動態插入到文檔中 - 這些將不會通過簡單的抓取工作。這些技巧就是使用JavaScript調試器來查看AJAX調用的內容,並從請求和響應中對它們進行逆向工程。

最難的事情將是Java小應用程序驅動的網站,但幸運的是這是罕見的。這些可能通過任何網絡機制獲取他們的數據,並且您必須通過檢查網絡流量來反向設計所有這些數據。

即使IE/VBA會失敗,如果它的Java小程序,我想。

此外,不要混淆Java和JavaScript。

+0

我認爲當他在同一句話中提到ASP和Java時,他指的是JSP或Java服務器頁面,而不是Javascript。 – adamleerich

3

這是正常的HTML,與具有刮數據清理後的相關聯的正常麻煩。

下面的伎倆:

  • readHTMLTable閱讀的頁面中包XML
  • 這是頁面上的第五個表,所以提取第五元素
  • 採取的第一行,併爲其分配到表名
  • 刪除第一行

代碼:

x <- readHTMLTable("http://www.bwea.com/ukwed/construction.asp", 
        as.data.frame=TRUE, stringsAsFactors=FALSE) 
dat <- x[[5]] 
names(dat) <- unname(unlist(dat[1, ])) 

得到的數據:

dat <- dat[-1, ] 

'data.frame': 39 obs. of 10 variables: 
$ Date    : chr "September 2011" "August 2011" "August 2011" "August 2011" ... 
$ Wind farm   : chr "Baillie Wind farm - Bardnaheigh Farm" "Mains of Hatton" "Coultas Farm" "White Mill (Coldham ext)" ... 
$ Location   : chr "Highland" "Aberdeenshire" "Nottinghamshire" "Cambridgeshire" ... 
$ Power(MW)   : chr "2.5" "0.8" "0.33" "2" ... 
$ Turbines   : chr "21" "3" "1" "7" ... 
$ MW Capacity   : chr "52.5" "2.4" "0.33" "14" ... 
$ Annual homes equiv*.: chr "29355" "1342" "185" "7828" ... 
$ Developer   : chr "Baillie" "Eco2" "" "COOP" ... 
$ Latitude   : chr "58 02 52N" "57 28 11N" "53 04 33N" "52 35 47N" ... 
$ Longitude   : chr "04 07 40W" "02 30 32W" "01 18 16W" "00 07 41E" ...