助けてほしい問題があります。csv ファイルにロードできる R コードを作成する必要があります。csv ファイルには「リンク」という名前の列が 1 つ含まれており、各 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を超えると問題になり始めます。とはいえ、この特定のタスクに適したクローラーになるためには、このコードにいくつか実装する必要があります。
問題1を解決すると一時的にケースが解決するはずなので、問題を2つに分割しました。
ダウンロード100回ごとにSys.Sleep機能を使いたい。したがって、コードは最初の 100 個のリンクに対して 100 個のリクエストを発行し、次の 100 個のリクエストを発行する前に x 秒間一時停止します...
データセット/csv ファイルのすべての行/リンクでそれを行った後、各 csv ファイルを 2 つの条件でチェックする必要があります。それらを空にすることはできず、サーバーがいくつかの特別なケースで私に与える特定のエラーメッセージを含めることはできません. これらの 2 つの条件のいずれかが true の場合、ファイル名 (リンク番号) をベクトルに保存して、そこから作業できるようにする必要があります。
うわー、この質問は突然かなり長くなりました。私はそれが大きな問題であることを理解しており、私は多くのことを尋ねています. これは私の修士論文であり、R プログラミングに関するものではありませんが、アクセス権を与えられた多くの Web サイトからコンテンツをダウンロードする必要があります。次に、内容を分析する必要があります。これが私の論文の目的です。提案/コメントは大歓迎です。
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=""))}
もっと私を助けることができますか?