Выскабливание JavaScript с помощью R - PullRequest
3 голосов
/ 12 февраля 2012

Я хочу скачать таблицы с metal-archives.com, точно с http://www.metal -archives.com / artist / rip , но есть одна большая проблема.Эти таблицы генерируются JavaScript.На самом деле я не знаю, что делать в этом случае.

Есть ли возможность проанализировать этот сайт с помощью пакета R и XML?

Ответы [ 2 ]

7 голосов
/ 12 февраля 2012

Вот вся информация в формате JSON

http://www.metal -archives.com / artist / ajax-rip

2 голосов
/ 15 февраля 2012

Спасибо пользователю bubmu Я добился того, чего хотел.Ниже приведен код, который решает мою проблему.

a<-1:8
b<-200*a
x<-paste("http://www.metal-archives.com/artist/ajax-rip?iDisplayStart=",b,"&sEcho=",a,sep="")
x<-c(x,"http://www.metal-archives.com/artist/ajax-rip?iDisplayStart=1700&sEcho=9")

JSONparse<-function(x){
  library(XML)
  doc<-htmlParse(x)
  str<-xpathApply(doc,'//p',xmlValue)[[1]][1]
  x1<-strsplit(str,'\\[')
  x1<-x1[[1]][-1]
  x1<-x1[-1]

  x2<-strsplit(x1,'\\",')
  x3<-lapply(x2, function(y) {
    y<-gsub('\\t','',y)
    y<-gsub('\\n','',y)
    y<-gsub('\\r','',y)
    y<-gsub('\\\"','',y)
    y<-gsub('\\]}','',y)
    y<-gsub('\\],','',y)
    y<-as.data.frame(t(y))
    y})

  allinall<-do.call('rbind',x3)
  colnames(allinall)<-c("Artist","Country","Band","When","Why")
  allinall
}

metallum<-lapply(x,JSONparse)
metallum<-do.call('rbind',metallum)

Но он работает только для этого сайта.Конечно лучше пакет RJSONIO или rjson.

...