我需要使用R来下载网页的源代码。
当我点击Firefox中的“查看源代码”时,我会看到所有的源代码。 但是,当我使用RCurl下载源代码时,我只看到它的一部分。缺少的部分是由Javascript生成的,所以也许这就是问题所在? RCurl可以看不到Javascript生成的信息吗?
如何将源代码导入R?无论是通过RCurl,我已经尝试过或进入过txt文件,然后加载到R中就可以了。
由于
答案 0 :(得分:2)
elinks文本浏览器有一些javascript支持。请参阅文档以了解如何配置/增强此支持:
elinks -dump www.google.com
将为您提供该网站的渲染版本。
更好的选择是使用mozrepl。它连接到firefox,从命令提示符,您可以通过网页javascript执行任何操作:
telnet localhost 4242
repl> var w=window.open("https://google.com")
repl> w.document.getElementsByTagName('html')[0].innerHTML
应该给你页面。
问题是如何使用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 [1:73] "repl> repl> \"<head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"><meta itemprop=\"image\" content=\"/"| __truncated__ ...
您可以根据需要进一步过滤。
答案 1 :(得分:1)
RCurl
只处理传输的HTTP部分;它没有Javascript解释器来执行页面中的代码(可以下载额外的HTML或直接编写它)。您需要找到一个命令行程序,它既可以下载URL,也可以执行附带的Javascript,然后将结果保存到文件中。您可以使用system()
调用此程序,然后使用。
答案 2 :(得分:0)
我一直在为完全相同的任务而苦苦挣扎几个星期。我建议最直接的方法是使用RSelenium库中的var prmpt = parseInt(prompt("Enter your fav number, 1-50"));
for (i = 1; i <= 50; i++) {
if (i === prmpt) {
console.log("Yikes, get this " + prmpt + " number outta here!");
} else {
console.log(i);
}
}
。 RSelenium基础小插图https://cran.r-project.org/web/packages/RSelenium/vignettes/basics.html进行了概述。
rsDriver