9

私は R プログラミングに比較的慣れていないので、ジョンズ・ホプキンス大学のデータ サイエンス トラックで学んだことのいくつかを実用化しようとしています。具体的には、米国財務省の Web サイトから過去の債券価格をダウンロードするプロセスを自動化したいと考えています。

Firefox と R の両方を使用して、米国財務省の Web サイトが非常に単純な HTML POST フォームを使用して、関心のある相場の単一の日付を指定していることを確認できました。次に、すべての未払い債券のセカンダリ マーケット情報のテーブルを返します。

2 つの異なる R パッケージを使用して、米国財務省の Web サーバーに要求を送信しようとしましたが、失敗しました。私が試した2つのアプローチは次のとおりです。

試行 #1 (RCurl を使用):

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
td.html <- postForm(url,
                    submit = "Show Prices",
                    priceDate.year  = 2014,
                    priceDate.month = 12,
                    priceDate.day   = 15,
                   .opts = curlOptions(ssl.verifypeer = FALSE))

これにより、Web ページが返されて保存されtd.htmlますが、含まれているのは Treasurydirect サーバーからのエラー メッセージだけです。ブラウザを介して同じリクエストを送信すると、期待どおりの結果が得られるため、サーバーが機能していることはわかっています。

試行 #2 (rvest を使用):

s <- html_session(url)
f0 <- html_form(s)
f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
test <- submit_form(s, f1)

残念ながら、このアプローチは R から離れることもなく、R から次のエラー メッセージが表示されます。

Submitting with 'submit'
Error in function (type, msg, asError = TRUE)  : <url> malformed

問題の診断を試みることができるように、どの「不正な」テキストが rvest に送信されているかを確認する方法がわかりません。

この単純なタスクを解決するための提案やヒントをいただければ幸いです。

4

2 に答える 2

14

まあ、それはhttrライブラリで動作するようです。

library(httr)

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"

fd <- list(
    submit = "Show Prices",
    priceDate.year  = 2014,
    priceDate.month = 12,
    priceDate.day   = 15
)

resp<-POST(url, body=fd, encode="form")
content(resp)

ライブラリは、rvest実際には単なるラッパーhttrです。サーバー名のない絶対 URL をうまく解釈できないようです。だからあなたが見れば

f1$url
# [1] /GA-FI/FedInvest/selectSecurityPriceDate.htm

サーバー名ではなく、パスだけが含まれていることがわかります。これは紛らわしいようhttrです。もしあなたがそうするなら

f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
f1$url <- url
test <- submit_form(s, f1)

それはうまくいくようです。おそらく、に報告する必要があるバグですrvest。(テスト済みrvest_0.1.0)

于 2014-12-24T04:39:15.343 に答える