【问题标题】:Extract text from HTML node tree with R使用 R 从 HTML 节点树中提取文本
【发布时间】:2013-11-01 10:42:13
【问题描述】:

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

  }

但这也会引发闭包不可子集错误。

最后在grep 周围不带data[] 尝试上述函数抛出

Error in df.IMDB[i] <- grep("Users rated this", "", df.IMDB[i]) : replacement has length zero

我实际上希望最终用空格替换给定文本字符串后面的 [0-9].[0-9] 形式的数字以外的所有内容,但我先做一个更简单的版本来让事情正常工作。

谁能告诉我应该使用什么函数来编辑我的 query.IMDB 向量上每个点的文本

【问题讨论】:

  • 可能有一个 API,see here
  • 你想做什么?你想提取什么文本?你想看收视率表吗?
  • 是的,我想编制一个评级表。
  • 嗨 Halfer,如果我理解正确的话,API 是专有的并且仅供许可证持有者使用,或者我在讨论中遗漏了什么。

标签: html regex r web-scraping rcurl


【解决方案1】:

这里不需要使用grep(避免HTML文件的正则表达式)。使用来自XML 包的便捷函数readHTMLTable

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

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多