当我使用FireFox'Inspect Element'功能时,HTML源文件中没有显示div标签。换句话说,我需要的信息是JavaScript代码,但不是HTML页面源代码。有没有办法将这些信息读入R?
我发现了一个类似的问题:How to view webpage source code using 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代码,或建议替代解决方案吗?
感谢。
解决: 上面的代码之前没有工作,但是由于没有给页面加载足够的时间。可能不是解决这个问题的最有效方法,但仍然是一个解决方案。谢谢大家
答案 0 :(得分:5)
您可以使用RCurl中的getURL
来获取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中完全执行此操作,但我按the post you referenced跟VitoshKa进行了操作。
首先,在Firefox中转到工具 - &gt;附加组件。搜索并安装mozrepl。然后,在Firefox中单击工具 - &gt; MozRepl - &gt;启动。
现在,在 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)
答案 1 :(得分:0)
您必须在html上运行完整的JavaScript解释器。
您可以使用Rhino。它会很慢。
否则你需要开像selenium RC这样的浏览器。 (您可以使用selenium .net库)
你最好通过检查来弄清楚javascript的作用,而不是天真的刮擦。
如果您认真对待抓取,还要学习XPATH查询。