NOMADS Web サイトのすべてのモデルを含めるために、 rNOMADS パッケージの更新を作成しています。これを行うには、モデルごとに html ディレクトリ ツリーを検索する必要があります。この木の深さや枝の数は事前にはわかりません。そのため、トップページのリンクを再帰的に検索し、各リンクをたどり、リンクがなくなったページの URL を返す単純な Web クローラーを作成しています。そんなページがモデルデータのダウンロードページです。 検索する必要がある URLの例を次に示します。
このページの下にあるすべての Web ページのアドレスを取得したいと考えています。私はこのコードを試みました:
library(XML)
url <- "http://nomads.ncep.noaa.gov/cgi-bin/filter_cmcens.pl"
WebCrawler <- function(url) {
doc <- htmlParse(url)
links <- xpathSApply(doc, "//a/@href")
free(doc)
if(is.null(links)) { #If there are no links, this is the page we want, return it!
return(url)
} else {
for(link in links) { #Call recursively on each link found
print(link)
return(WebCrawler(link))
}
}
}
ただし、すべての「行き止まり」のページのリストを返す良い方法がわかりません。代わりに、このコードはモデル ページのリスト全体ではなく、1 つのモデル ページのみを返します。グローバル変数を宣言し、その変数に URL を保存することもできますが、これを行うためのより良い方法があるかどうか疑問に思っています。この関数を構築して、すべてのページのリストを取得するにはどうすればよいですか?