我有一个问题需要帮助。我需要创建一段可以加载到 csv 文件中的 R 代码。csv 文件包含一个名为“Link”的列,每个 i(Row) 都有一个链接,代码需要从该链接下载链接的内容并将其放在单独的 csv 文件中。到目前为止,我已经设法找到并修改了下面显示的代码。(感谢 Christopher Gandrud 和合著者)
library(foreign)
library(RCurl)
addresses <- read.csv(">>PATH TO CSV FILE<<")
for (i in addresses) full.text <- getURL(i)
text <- data.frame(full.text)
outpath <-">>PATH TO SPECIFIED FOLDER<<"
x <- 1:nrow(text)
for(i in x) {
write(as.character(text[i,1]), file = paste(outpath,"/",i,".txt",sep=""))
}
实际上代码运行良好,但问题是我的请求使服务器超载,所以在从 100-150 个链接下载了正确的内容后,文件只是空的。我知道这是问题所在,因为我已经多次测试它,但链接数量正在减少。其实如果我当时只下载100个链接是没有问题的。超过 100 它开始成为一个问题。尽管如此,我需要在这段代码中实现一些东西,让它成为这个特定任务的一个很好的爬虫。
我把我的问题一分为二,因为解决问题一应该暂时解决这个问题。
我想为每 100 次下载使用 Sys.Sleep 功能。因此,代码为前 100 个链接触发 100 个请求,然后在触发下一个 100 个请求之前暂停 x 秒...
对我的数据集/csv 文件中的所有行/链接完成此操作后,我需要它来检查每个 csv 文件的两个条件。它们不能为空,也不能包含服务器在某些特殊情况下给我的特定错误消息。如果这两个条件之一为真,则需要将文件名(链接号)保存到我可以从那里使用的向量中。
哇这个问题突然变得很长。我意识到这是一个很大的问题,我问了很多。这是我的硕士论文,不是关于 R 编程的,但我需要从很多我可以访问的网站下载内容。接下来我要分析内容,这就是我的论文的内容。欢迎任何建议/意见。
library(foreign)
library(RCurl)
addresses <- read.csv("~/Dropbox/Speciale/Mining/Input/Extract post - Dear Lego n(250).csv")
for (i in addresses) {
+ if(i == 50) {
+ print("Why wont this work?")
+ Sys.sleep(10)
+ print(i)
+ }
+ else {
+ print(i)
+ }
+ }
“然后是加载的链接的完整列表。在 i == 50 处没有“为什么这不起作用”,然后是
警告信息
In if (i == 100) {:
the condition has length > 1 and only the first element will be used
full.text <- getURL(i)
text <- data.frame(full.text)
outpath <-"~/Dropbox/Speciale/Mining/Output"
x <- 1:nrow(text)
for(i in x) {
write(as.character(text[i,1]), file = paste(outpath,"/",i,".txt",sep=""))}
能帮助我更多吗?