2011-09-21 113 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" ...