【问题标题】:R: Parsing group of html files with loopR:用循环解析一组html文件
【发布时间】:2015-09-21 04:34:12
【问题描述】:

以下代码适用于单个 .html 文件:

doc <- htmlParse("New folder/1-4.html")
plain.text <- xpathSApply(doc, "//td", xmlValue)
plain.text <- gsub("\n", "", plain.text)
gregexpr("firstThing", plain.text)
firstThing <- substring(plain.text[9], 41, 50)
gregexpr(secondThing, plain.text)
secondThing <- substring(plain.text[7], 1, 550)

但下面的循环没有,并给了我错误:

XML 内容似乎不是 XML

file.names <-  dir(path = "New folder")

for(i in 1:length(file.names)){
doc <- htmlParse(file.names[i])
plain.text <- xpathSApply(doc, "//td", xmlValue)
gsub("\n", "", plain.text)
firstThing[i] <- substring(plain.text[9], 41, 50)
secondThing[i] <- substring(plain.text[7], 1, 550)
  }

我只是试图提取信息(正如我在第一批代码中所做的那样),并创建一个信息向量。

关于如何解决此问题的任何想法?

【问题讨论】:

  • 是的,感谢您指出这一点,但仍然不能解决错误问题。

标签: html xml r rcurl


【解决方案1】:

两件事。首先,你的路径是错误的。要解决此问题,请使用:

filenames = dir(path = "New folder", full.names = TRUE)

其次,比在for 循环中填充两个变量更好的方法是在列表函数中生成结构化数据:

result = lapply(filenames, function (filename) {
    doc = htmlParse(filename)
    plain_text = xpathSApply(doc, "//td", xmlValue)
    c(first = substring(plain_text[9], 41, 50),
      second = substring(plain_text[7], 1, 550))
})

现在result 是一个元素列表,其中每个元素都是一个向量,名称为firstsecond

其他几点说明:

  • 注意变量名中的点 — S3 使用名称中的点来确定泛型方法的类。在变量名中使用点表示其他任何内容会导致混淆,应避免使用。

  • 循环中的gsub 语句无效。

【讨论】:

  • 实际上,这会向每个单元格返回相同的信息——因此它似乎不会循环遍历文件。有什么想法吗?
  • @user2880936 一个简单的错字,现在应该更正了。
  • 太棒了。谢谢康拉德。
猜你喜欢
  • 2021-11-10
  • 2022-10-15
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2017-07-29
  • 2014-02-26
相关资源
最近更新 更多