0

我目前正在尝试从我已解析如下的 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 向量

4

1 回答 1

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 转换为数字。

于 2013-11-01T11:02:41.843 回答