当我使用FireFox 'Inspect Element‘函数时,有一些div标签在HTML源文件中没有显示。换句话说,我需要的信息是在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代码,或者建议一个替代解决方案吗?
谢谢。
解决方法:上面的代码之前无法工作,但这是由于没有给页面足够的加载时间。可能不是解决这个问题的最有效的方法,但仍然是一个解决方案。谢谢大家
发布于 2013-01-24 08:35:43
您可以从使用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中做到这一点,但我通过VitoshKa跟踪了the post you referenced,并让它正常工作。
首先,在火狐中,进入Tools -> Add-ons。搜索并安装mozrepl。然后,在Firefox中单击Tools -> MozRepl -> Start。
现在,在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-24 07:59:59
你必须在html上运行一个完整的javascript解释器。
您可以使用Rhino。它会很慢。
否则,你将需要像selenium RC一样驱动浏览器。(您可以使用selenium .net库)
你最好通过检查来弄清楚javascript做了什么,而不是天真的抓取。
如果您对抓取很感兴趣,还可以学习XPATH查询。
https://stackoverflow.com/questions/14491598
复制相似问题