使用R从HTML节点树中提取文本

时间:2013-11-01 10:42:13

标签: html regex r web-scraping rcurl

我目前正在尝试从我解析的HTML树中抓取文本,如下所示: -

require(RCurl)
require(XML)

query.IMDB <- getURL('http://www.imdb.com/title/tt0096697/epdate') #Simpsons episodes, rated and ordered by broadcast date
names(query.IMDB)

query.IMDB

query.IMDB <- htmlParse(query.IMDB)
df.IMDB <- getNodeSet(query.IMDB, "//*/div[@class='rating rating-list']")

我的第一次尝试只是在结果向量上使用grep,但这失败了。

data[grep("Users rated this", "", df.IMDB)]
#Error in data... object of type closure is not subsettable

我的下一次尝试是在query.IMDB向量中的各个点上使用grep: -

vect <- numeric(length(df.IMDB))

for (i in 1:length(df.IMDB)){

      vect[i] <- data[grep("Users rated this", "", df.IMDB)]

  }

但是这也会引发闭包而不是子例化错误。

最后在data[]投掷

的情况下尝试不使用grep的上述函数
Error in df.IMDB[i] <- grep("Users rated this", "", df.IMDB[i]) : replacement has length zero

我实际上希望最终替换除了带有空格的给定文本字符串之后的一些形式[0-9].[0-9]之外的所有内容,但是我正在做一个更简单的版本以使该工作正常工作。

任何人都可以建议我应该使用什么函数来编辑查询中每个点的文本.IMDB向量

1 个答案:

答案 0 :(得分:1)

此处无需使用grep(AVoid正则表达式与HTML文件)。使用readHTMLTable包中的便捷功能XML

library(XML)
head(readHTMLTable('http://www.imdb.com/title/tt0096697/epdate')[[1]][,c(2:4)])
                            Episode UserRating UserVotes
1 Simpsons Roasting on an Open Fire        8.2     2,694
2                   Bart the Genius        7.8     1,167
3                   Homer's Odyssey        7.5     1,005
4     There's No Disgrace Like Home        7.9     1,017
5                  Bart the General        8.0       992
6                      Moaning Lisa        7.4       988

这会为您提供评分表,...也许您应该将UserVotes转换为数字。