如何下载网页的源代码?

时间:2013-01-23 23:55:07

标签: javascript html r

当我使用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代码,或建议替代解决方案吗?

感谢。

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

2 个答案:

答案 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 referencedVitoshKa进行了操作。

首先,在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查询。