【问题标题】:Excessive depth in document: XML_PARSE_HUGE option for xml2::read_html() in R文档深度过大:R 中 xml2::read_html() 的 XML_PARSE_HUGE 选项
【发布时间】:2017-02-02 01:57:40
【问题描述】:

首先,我想为一个新问题道歉,因为我的个人资料还不允许我评论其他人的 cmets,尤其是我看过的两个 SO 帖子。所以请耐心等待这个老家伙:-)

我正在尝试读取 100 个字符文件的列表,大小从 90KB 到 2MB 不等,然后使用qdap 包对我从文件中提取的文本进行一些统计,即计算句子、单词等。文件包含以前使用RSelenium::remoteDriver$getPageSource() 抓取并使用write(pgSource, fileName.txt) 保存到文件的网页源。我正在使用以下方法循环读取文件:

pgSource <- readChar(file.path(fPath, fileNames[i]), nchars = 1e6)
doc <- read_html(pgSource)

对于某些文件正在抛出

Error in eval(substitute(expr), envir, enclos) : 
  Excessive depth in document: 256 use XML_PARSE_HUGE option [1] 

我看过这些帖子,SO33819103SO31419409,它们指出了类似的问题,但无法完全理解如何使用 @shabbychef 的解决方法,正如在上面第一个链接中使用@glossarch 建议的 sn-p 所建议的那样.

library(drat)
drat:::add("shabbychef");
install.packages('xml2')
library("xml2")

编辑:我注意到,当我之前运行另一个脚本使用 URL 从网页实时抓取数据时,我没有遇到这个问题。代码是一样的,我只是从RSelenium's remoteDriver读到doc &lt;- read_html(pgSource)

我想问这个温和的社区是,在添加 shabbychef 的 drat 之后,我是否按照正确的步骤安装和加载 xml2,或者我是否需要按照 SO17154308 帖子中的建议添加其他步骤。非常感谢任何帮助或建议。谢谢。

【问题讨论】:

  • 这些尺寸非常合理,我怀疑这可能是 HTML 格式错误,正如您链接的 SO 帖子之一所暗示的那样。你能提供一些数据吗?如果没有,通过htmltidy 运行 HTML(使用 GH 版本,因为我需要尽快对其进行 CRAN 推送)可能会“修复”它足以防止解析器错误。 w/r/t 使用 Steven 的代码,如果 drat 方法不起作用,您也可以执行 devtools::install_github("shabbychef/xml2")
  • 感谢您的帮助。我已尝试按照您的建议安装htmltidyshabbchef/xml2。我还必须事先安装 RTools。这次我没有像以前那样收到错误,因为 RStudio 在doc &lt;- read_html(pgSource) 之后不断崩溃,并通知“R 会话中止/R 出现致命错误/会话已终止”,之后我必须重新启动 IDE。如果它有帮助,则以下链接指向导致问题的文件。它大约 400 KB,在我的 Google 驱动器上。 link
  • 如果你有一个htmltidy 的核心转储,这可能是由于使用了 CRAN 版本而不是 GitHub 版本(我修复了一个尚未进入 CRAN 的错误)。但是,请在新的 R 会话中安装来自 CRAN 的 xml2 包。然后尝试 pg &lt;- read_html("66951-77_src.html", options="HUGE"),因为 Hadley 或 Jim 最近似乎增加了对它的支持(为什么他们与实际选项名称不同,因为他们为所有其他人保留了它)。
  • @hrbrmstr - 感谢您的宝贵帮助。出于某种原因,在旧会话中,htmltidy 没有被正确下载和安装。我还使用了来自 CRAN 的xml2。现在 read_html 在使用其中一个问题文件进行测试时可以正常工作。同时,我正在使用实时版本下载页面源并在不保存的情况下使用它们,因为这不会产生错误。但是这个解决方案使我能够使用保存的源而不是上线。我不想触发任何网络服务器的铃声:-)。感谢一百万。

标签: html r xml web-scraping rselenium


【解决方案1】:

我不知道这样做是否正确,但@hrbrmstr 在他的一个 cmets 中回答了我的问题。我决定发布一个答案,以便偶然发现这个问题的人看到它至少有一个答案。

在阅读html源码时使用“HUGE”选项基本解决了这个问题。我的问题仅与我加载以前保存的源代码有关。我在使用应用程序的“实时”版本时没有发现同样的问题,即直接从网站读取源代码。

无论如何,现在 2016 年 8 月更新的优秀 xml2 包允许使用 HUGE 选项,如下所示:

doc <- read_html(pageSource, options = "HUGE")

如需更多信息,请在此处阅读xml2 参考手册 CRAN-xml2

再次感谢@hrbrmstr 的宝贵贡献。

【讨论】:

  • 回答你自己的答案是 100% 酷!很高兴它有帮助(这些错误可能真的很令人沮丧,所以你可以继续分析与数据争论真是太好了:-)
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多