R没有识别变量的值

时间:2013-10-19 21:37:44

标签: r web-scraping

我正在使用网站http://www.crowdrise.com/CDISkoll

考虑我做的以下R代码:

library("RCurl")
library("XML")
library("stringr")

user.address<-"http://www.crowdrise.com/CDISkoll"                     
user.url<-getURL(user.address)       
html <- htmlTreeParse(user.url, useInternalNodes = TRUE)

if(!is.null(xpathSApply(html,
   '//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue))){
       website.goal.percentage<-
               do.call("paste",as.list(xpathSApply(html,
                '//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue)))
} 

if(is.null(xpathSApply(html,
  '//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue))){
          website.goal.percentage<-"Not Available"
}

现在我上面提到的网站不包含任何有关xpath的信息 //div[@class="grid1-4"]//p[@class="progressText"]。因此,我的变量website.goal.percentage应该是字符串"Not Available"。但是当我在R上执行代码时,website.goal.percentage会返回character(0) ....

为什么R没有将"Not Available"存储到变量website.goal.percentage,我该如何解决?

1 个答案:

答案 0 :(得分:1)

这很容易诊断,你应该看到xpathSApply这里返回一个空列表,以及R如何认为is.null(list())FALSE。相反,您应该检查length(...) == 0

我还建议你使用xpathApply,因为它系统地返回一个列表。最后,看看如果使用变量,代码看起来会更好看:

nodes <- xpathApply(html, '//div[@class="grid1-4"]//p[@class="progressText"]',
                    xmlValue)

website.goal.percentage <- if(length(nodes) == 0) "Not Available" else
                           do.call("paste", nodes)