使用“wget”方法并指定额外的wget选项下载文件

4

我有一个关于在R中使用download.file函数并使用wget选项以及应用一些wget额外选项的基本问题,但是我就是无法使它工作。

我的目标是:下载一个网页的本地副本(实际上是几个网页,但现在的挑战是即使只有1个也要让它正常工作)。

挑战是:我需要本地副本看起来与在线版本完全相同,这也意味着包括链接/图标等。我发现wget是一个很好的工具,我想指定一些额外的选项,例如--random wait-p-r。我找到了一些非常有帮助的教程,但其中没有一个是在R中使用额外选项,而是直接在wget中使用。

因此,这是我为此编写的代码:

download.file('https://www.wikipedia.org/', destfile = "wikipage", method = "wget", extra = getOption("--random wait", "-r", "-p"))

这段代码无法正常工作。我怀疑问题出在“wget”方法和附加信息的规范上。

有人能帮忙吗?非常感谢!

额外的问题:我知道“destfile”应该指定下载文档的文件名,但是否有任何办法可以通过路径指定一个文件夹,所有下载的文件都应该保存到该文件夹中?

提前感谢!

最好的祝福 卡罗琳

1个回答

3
你可以直接在extra参数中指定多个选项,而不需要使用getOption()。
此外,你可以简单地将要保存下载文件的路径包含在destfile中。
download.file('https://www.wikipedia.org/', destfile = "mydirectory/wikipage.html", method = "wget", extra = "-r -p --random-wait")

然而,你会遇到一个问题,它将尝试将所有下载的项目保存到同一个destfile中。

请注意,之前有一个similar question(我现在才看到)。建议的解决方案是使用system()而不是download.file来运行wget命令。适用于您的问题:

setwd("./mydirectory")
system("wget http://www.wikipedia.org -p -k --random-wait")

编辑:请注意,这两个命令仅适用于已安装wget的系统。在Linux/BSD/Mac上,应安装的软件包通常称为wget。在Windows上,根据download.file() help,可从gnuwin32和Cygwin等软件包中获取wget。在这种情况下,如果系统不知道wget可执行文件的位置,则system()命令仍可能无法工作。在这种情况下,您可能需要指定wget可执行文件的绝对路径。


嗨Orange,非常感谢您对我的问题的回答!但是如果我运行第一个建议,仍然会收到错误消息。它说: - Carolin
@Carolin 代码功能现在可用。假设传递给 “destfile”的路径存在(否则会抛出“'wget'调用具有非零退出状态”)。 - 0range
@Carolin 啊...不是的。你刚才发布的也不是你的错误信息,这是download.file命令。此外:我几乎可以确定这不是你想要的。它会一个接一个地下载所有项目,并将它们收集到一个单独的文件中。在您的维基百科示例中,这只是index.html和robots.txt。除非您成功地在正确的位置再次切割目标文件,否则这对您没有任何好处。我建议您研究使用system()的其他解决方案。 - 0range
好的,是的,抱歉 :-/。它实际上给了我与您提供的链接中相同的错误(即 'wget' 调用具有非零退出状态)。我已尝试使用 system() 解决方案,但是我得到了一个“状态 127”错误信息,我认为这表示该命令未找到。您知道为什么会出现这种情况吗? - Carolin
别忘了通过接受答案来感谢 @Orange 的努力。 - Dieter Menne
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接