6

私は、フランス下院議会のウェブサイトの 2 つのページからすべての法案をかき集めようとしています。ページは 2002 年から 2012 年をカバーし、それぞれ 1,000 未満の請求書を表しています。

このために、次のgetURLループを使用してスクレイピングします。

b <- "http://www.assemblee-nationale.fr" # base
l <- c("12","13") # legislature id

lapply(l, FUN = function(x) {
  print(data <- paste(b, x, "documents/index-dossier.asp", sep = "/"))

  # scrape
  data <- getURL(data); data <- readLines(tc <- textConnection(data)); close(tc)
  data <- unlist(str_extract_all(data, "dossiers/[[:alnum:]_-]+.asp"))
  data <- paste(b, x, data, sep = "/")
  data <- getURL(data)
  write.table(data,file=n <- paste("raw_an",x,".txt",sep="")); str(n)
})

getURL()ここで関数を最適化する方法はありますか? オプションを渡すことで同時ダウンロードを使用できないようですasync=TRUE。これにより、毎回同じエラーが発生します。

Error in function (type, msg, asError = TRUE)  : 
Failed to connect to 0.0.0.12: No route to host

何か案は?ありがとう!

4

2 に答える 2

1

lapply の代わりに mclapply {multicore} を試してください。

「mclapply は、lapply の並列化されたバージョンです。X と同じ長さのリストを返します。その各要素は、X の対応する要素に FUN を適用した結果です。」( http://www.rforge.net/doc/packages/multicore/mclapply.html )

それがうまくいかない場合は、XMLパッケージを使用するとパフォーマンスが向上する可能性があります。xmlTreeParse などの関数は、非同期呼び出しを使用します。

「xmlTreeParse では、R オブジェクトに変換されるツリー内のノードにハンドラーを適用できるハイブリッド スタイルの処理が可能であることに注意してください。これは、イベント駆動型または非同期呼び出しのスタイルです。」( http://www.inside-r.org/packages/cran/XML/docs/xmlEventParse )

于 2014-03-18T23:13:50.077 に答える
-5

R を使用する理由 大規模なスクレイピング ジョブの場合は、タスク用に既に開発されたものを使用することをお勧めします。ブラウザのアドオンである Down Them All で良い結果が得られました。どこから始めて、どのくらい深く掘り下げるか、どのパターンに従うか、HTML をどこにダンプするかを指定するだけです。

次に、R を使用して HTML ファイルからデータを読み取ります。

利点は非常に大きいです。これらのアドオンはタスクのために特別に開発されているため、複数のダウンロード (制御可能) を実行し、適切なヘッダーを送信するため、次の質問は「ユーザー エージェント文字列を設定するにはどうすればよいですか?」ではありません。 RCurl?」を使用して、一部のダウンロードが失敗した場合の再試行に対処できますが、これは必然的に失敗します。

もちろん、欠点は、このプロセスを自動的に簡単に開始できないことです。その場合は、コマンド ラインで「curl」を使用するか、他のコマンド ライン ミラーリング ユーティリティを使用する方がよいでしょう。

正直なところ、R で Web サイトのコードを書くよりも、時間を有効に使うことができます...

于 2012-04-09T08:03:12.560 に答える