if(!require(datamart)) install.packages("datamart")

allensbach <- function(resource="sonntagsfrage") urldata3(
    resource=resource,
    template="http://www.ifd-allensbach.de/studien-und-berichte/sonntagsfrage/gesamt.html",
    extract.fct=htmlParse,
    transform.fct=function(x) {
        nodes <- try(getNodeSet(x, '//tr[@class="odd" or @class="even"]'), silent=TRUE)
        
        if(inherits(nodes, "try-error")) return(data.frame())
        if(length(nodes)==0) return(data.frame())
        dat <- as.data.frame(t(sapply(nodes, function(n) c(
            timestamp=xmlValue(n[[1]]),
            afd=xmlValue(n[[3]]),
            cducsu=xmlValue(n[[4]]),
            spd=xmlValue(n[[5]]),
            fdp=xmlValue(n[[6]]),
            gruene=xmlValue(n[[7]]),
            linke=xmlValue(n[[8]]),
            piraten=xmlValue(n[[9]]),
            sonstige=xmlValue(n[[10]])
        ))), stringsAsFactors=FALSE)
        
        parse_number <- function(x) {
            idx <- x=="--"
            x[!idx] <- gsub(",", ".", x[!idx], fixed=TRUE)
            x[idx] <- NA
            return(as.numeric(x))
        }
        
        dat <- transform(dat,
            timestamp=strptime(strtail(timestamp, 10), "%d.%m.%Y"),
            afd=parse_number(afd),
            cducsu=parse_number(cducsu),
            spd=parse_number(spd),
            fdp=parse_number(fdp),
            gruene=parse_number(gruene),
            linke=parse_number(linke),
            piraten=parse_number(piraten),
            sonstige=parse_number(sonstige)
        )
        
        return(dat)
    }
)

query(allensbach(), resource="sonntagsfrage")