rvest错误:"类(out)中的错误< - " XMLNodeSet" :尝试在NULL"上设置属性

时间:2014-11-02 18:04:38

标签: r web-scraping rvest

我正试图用新的rvest包刮掉一组网页。它适用于大多数网页,但是当没有特定字母的表格条目时,会返回错误。

# install the packages you need, as appropriate
install.packages("devtools")
library(devtools)
install_github("hadley/rvest")
library(rvest)

此代码正常,因为网页上有字母E的条目。

# works OK
url <- "https://www.propertytaxcard.com/ShopHillsborough/participants/alph/E"
pg <- html_session(url, user_agent("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"))
pg %>% html_nodes(".sponsor-info .bold") %>% html_text()

这不起作用,因为网页上没有字母F的条目。错误消息是“类中的错误(out)&lt; - ”XMLNodeSet“:尝试在NULL上设置属性”

# yields error message
url <- "https://www.propertytaxcard.com/ShopHillsborough/participants/alph/F"
pg <- html_session(url, user_agent("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"))   
pg %>% html_nodes(".sponsor-info .bold") %>% html_text()    

任何建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以随时将pg ... html_nodes ... html_text打包在try中,然后测试该课程:

tmp <- try(pg %>% html_nodes(".sponsor-info .bold") %>% html_text(), silent=TRUE)

if (class(tmp) == "character") {
  print("do stuff")
} else {
  print("do other stuff")
}

编辑:另一个选择是使用boolean() XPath运算符并以这种方式进行测试:

html_nodes_exist <- function(rvest_session, xpath) {

  xpathApply(content(rvest_session$response, as="parsed"), 
             sprintf("boolean(%s)", xpath))

}

pg %>% html_nodes_exist("//td[@class='sponsor-info']/span[@class='bold']")
如果这些节点存在,

将返回TRUE;如果他们不存在,则返回FALSE(该功能需要通用以便能够使用session和{{1}对象并使用CSS选择器和XPath,但它是避免["HTMLInternalDocument" "HTMLInternalDocument" "XMLInternalDocument" "XMLAbstractDocument"]的方法。