2

当我使用 FireFox 的“检查元素”功能时,HTML 源文件中没有显示 div 标签。换句话说,我需要的信息是 JavaScript 代码,而不是 HTML 页面源代码。有没有办法将此信息读入R?

我发现了一个类似的问题:如何使用 R 查看网页源代码?

带有建议的代码:

mz <- socketConnection("localhost", "4242")
writeLines("var w=window.open(\"https://google.com\")\n",mz)
out <- readLines(mz) #empty the buffer
writeLines("w.document.getElementsByTagName('html')[0].innerHTML\n", mz)
out <- readLines(mz)
str(out)

但它为我返回 chr(0)。

有人可以提供上述 R 代码的帮助,或提出替代解决方案吗?

谢谢。

已解决:上面的代码以前不起作用,但这是由于没有给页面足够的时间来加载。可能不是解决这个问题的最有效方法,但仍然是一个解决方案。感谢大家

4

2 回答 2

6

您可以使用getURLfrom RCurl来获取 HTTP 响应。

library(RCurl)
address <- "https://discussions.apple.com/thread/4356115?tstart=0"
txt <- getURL(address)

现在您可以在开始标签上吐出字符串,然后在结束标签上拆分它

ss <- strsplit(txt, "<strong class=\"jive-thread-reply-message-correct-label\">")[[1]]
strsplit(ss[2], "</strong>")[[1]][1]

这使:

[1] "This solved my question"

事实证明,您想要的 div 标签不止一个,而上面的标签是错误的。我不知道如何纯粹在 R 中做到这一点,但我遵循了VitoshKa引用的帖子,我让它工作了。

首先,在 Firefox 中,转到工具 -> 附加组件。搜索并安装 mozrepl。然后,在 Firefox 中单击工具 -> MozRepl -> 开始。

现在,在R中:

mz <- socketConnection("localhost", "4242")
writeLines("var w=window.open(\"https://discussions.apple.com/thread/4356115?tstart=0\")\n",mz)
out <- readLines(mz) #empty the buffer
writeLines("w.document.getElementsByTagName('html')[0].innerHTML\n", mz)
out <- readLines(mz)

(loc <- grep("jive-thread-reply-message-correct-label", out))
#[1] 1150 2845

现在,out是一个向量loc保存包含您的标签的字符串的位置。它出现两次。第一个是你感兴趣的。

out[loc[1]]

您可以使用上面显示的相同方式从中提取信息strsplit,或者使用正则表达式和gsub


您可以关闭打开的窗口writeLines("w.window.close()", mz)

于 2013-01-24T00:35:43.300 回答
0

您必须在 html 上运行完整的 javascript 解释器。

你可以使用犀牛。它会很慢。

否则,您将需要像selenium RC那样驱动浏览器。(您可以使用 selenium .net 库)

您最好通过检查来弄清楚 javascript 的作用,而不是幼稚的抓取。

如果您对抓取很认真,还可以学习 XPATH 查询。

于 2013-01-23T23:59:59.397 回答