从 html 网站的 html 表中抓取数据既酷又简单。但是,如果网站不是用 html 编写的并且需要浏览器来显示相关信息,例如,如果它是一个 asp 网站或数据不在代码中而是通过 java 代码进入,我该如何完成这项任务?
就像在这里:http ://www.bwea.com/ukwed/construction.asp 。
使用 VBA for excel 可以编写一个打开和 IE 会话调用网站的函数,然后基本上复制和粘贴网站的内容。有机会用 R 做类似的事情吗?
这是正常的 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" ...
正如 Thomas 评论的那样,该站点只提供 HTML。一些网站使用 JavaScript 通过 AJAX 调用获取值并将它们动态地插入到文档中——这些不能通过简单的抓取来工作。这些技巧是使用 JavaScript 调试器来查看 AJAX 调用是什么,并从请求和响应中对它们进行逆向工程。
最难的是由 Java Applets 驱动的站点,但幸好这些很少见。这些可能通过几乎任何网络机制获取他们的数据,您必须通过检查网络流量来对所有这些进行逆向工程。
我认为,如果它是一个 Java 小程序,即使 IE/VBA 也会失败。
另外,不要混淆 java 和 JavaScript。