-2

从 html 网站的 html 表中抓取数据既酷又简单。但是,如果网站不是用 html 编写的并且需要浏览器来显示相关信息,例如,如果它是一个 asp 网站或数据不在代码中而是通过 java 代码进入,我该如何完成这项任务?

就像在这里:http ://www.bwea.com/ukwed/construction.asp 。

使用 VBA for excel 可以编写一个打开和 IE 会话调用网站的函数,然后基本上复制和粘贴网站的内容。有机会用 R 做类似的事情吗?

4

2 回答 2

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" ...
于 2011-09-21T15:21:15.643 回答
1

正如 Thomas 评论的那样,该站​​点只提供 HTML。一些网站使用 JavaScript 通过 AJAX 调用获取值并将它们动态地插入到文档中——这些不能通过简单的抓取来工作。这些技巧是使用 JavaScript 调试器来查看 AJAX 调用是什么,并从请求和响应中对它们进行逆向工程。

最难的是由 Java Applets 驱动的站点,但幸好这些很少见。这些可能通过几乎任何网络机制获取他们的数据,您必须通过检查网络流量来对所有这些进行逆向工程。

我认为,如果它是一个 Java 小程序,即使 IE/VBA 也会失败。

另外,不要混淆 java 和 JavaScript。

于 2011-09-21T14:21:48.623 回答