【发布时间】: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]
我看过这些帖子,SO33819103 和 SO31419409,它们指出了类似的问题,但无法完全理解如何使用 @shabbychef 的解决方法,正如在上面第一个链接中使用@glossarch 建议的 sn-p 所建议的那样.
library(drat)
drat:::add("shabbychef");
install.packages('xml2')
library("xml2")
编辑:我注意到,当我之前运行另一个脚本使用 URL 从网页实时抓取数据时,我没有遇到这个问题。代码是一样的,我只是从RSelenium's remoteDriver读到doc <- read_html(pgSource)。
我想问这个温和的社区是,在添加 shabbychef 的 drat 之后,我是否按照正确的步骤安装和加载 xml2,或者我是否需要按照 SO17154308 帖子中的建议添加其他步骤。非常感谢任何帮助或建议。谢谢。
【问题讨论】:
-
这些尺寸非常合理,我怀疑这可能是 HTML 格式错误,正如您链接的 SO 帖子之一所暗示的那样。你能提供一些数据吗?如果没有,通过
htmltidy运行 HTML(使用 GH 版本,因为我需要尽快对其进行 CRAN 推送)可能会“修复”它足以防止解析器错误。 w/r/t 使用 Steven 的代码,如果 drat 方法不起作用,您也可以执行devtools::install_github("shabbychef/xml2")。 -
感谢您的帮助。我已尝试按照您的建议安装
htmltidy和shabbchef/xml2。我还必须事先安装 RTools。这次我没有像以前那样收到错误,因为 RStudio 在doc <- read_html(pgSource)之后不断崩溃,并通知“R 会话中止/R 出现致命错误/会话已终止”,之后我必须重新启动 IDE。如果它有帮助,则以下链接指向导致问题的文件。它大约 400 KB,在我的 Google 驱动器上。 link -
如果你有一个
htmltidy的核心转储,这可能是由于使用了 CRAN 版本而不是 GitHub 版本(我修复了一个尚未进入 CRAN 的错误)。但是,请在新的 R 会话中安装来自 CRAN 的xml2包。然后尝试pg <- read_html("66951-77_src.html", options="HUGE"),因为 Hadley 或 Jim 最近似乎增加了对它的支持(为什么他们与实际选项名称不同,因为他们为所有其他人保留了它)。 -
@hrbrmstr - 感谢您的宝贵帮助。出于某种原因,在旧会话中,
htmltidy没有被正确下载和安装。我还使用了来自 CRAN 的xml2。现在 read_html 在使用其中一个问题文件进行测试时可以正常工作。同时,我正在使用实时版本下载页面源并在不保存的情况下使用它们,因为这不会产生错误。但是这个解决方案使我能够使用保存的源而不是上线。我不想触发任何网络服务器的铃声:-)。感谢一百万。
标签: html r xml web-scraping rselenium