Соскребать не html-сайты с R? - PullRequest
       19

Соскребать не html-сайты с R?

0 голосов
/ 21 сентября 2011

Очистка данных из HTML-таблиц с HTML-сайтов это круто и просто. Тем не менее, как я могу выполнить эту задачу, если веб-сайт не написан в формате HTML и требует браузер для отображения соответствующей информации, например, если это веб-сайт ASP или данные не в коде, но приходят через код Java?

Как здесь: http://www.bwea.com/ukwed/construction.asp.

С VBA для Excel можно написать функцию, которая открывает и сеанс IE, вызывая сайт, а затем в основном копировать и вставлять содержимое сайта. Есть ли шанс сделать что-то подобное с R?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Это нормальный 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" ...
1 голос
/ 21 сентября 2011

Этот сайт просто предоставляет HTML, как комментирует Томас. Некоторые сайты используют JavaScript для получения значений с помощью вызова AJAX и динамического вставления их в документ - это не сработает с помощью простого анализа. Хитрость заключается в том, чтобы использовать отладчик JavaScript, чтобы увидеть, что вызывает AJAX, и выполнить обратный инжиниринг их из запросов и ответов.

Сложнее всего будет сайты, управляемые Java-апплетами, но, к счастью, они редки. Они могут получать свои данные практически через любой сетевой механизм, и вам придется перепроектировать все это путем проверки сетевого трафика.

Даже IE / VBA потерпит неудачу, если это Java-апплет, я считаю.

Кроме того, не путайте Java и JavaScript.

...