2014-12-24 2 views
7

저는 R 프로그래밍에 비교적 익숙합니다. 존스 홉킨스 데이터 과학 트랙에서 배우고있는 것들 중 일부를 실제 사용하려고합니다. 특히, 나는 채권 가격을 역사적으로 다운로드하는 과정을 자동화하고 싶습니다. US Treasury websiteR에서 간단한 HTML 양식을 POST 할 수 있습니까?

Firefox와 R을 모두 사용하여 미국 재무부 웹 사이트에서 매우 간단한 HTML POST 양식을 사용하여 단일 날짜를 지정할 것을 결정할 수있었습니다. 관심 따옴표. 그런 다음 모든 미납 채권에 대한 2 차 시장 정보 표를 반환합니다.

두 개의 다른 R 패키지를 사용하여 미국 재무부 웹 서버에 요청을 제출하는 데 실패했습니다. 토끼는 내가 시도한 두 가지 방법은 다음과 같습니다

시도 # 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)) 

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 

그럴 수 없어 문제를 진단하려고 시도 할 수 있도록 "잘못된 형식의"텍스트가 어떻게 전송되는지 확인하는 것 같습니다.

이 간단한 작업을 해결하기위한 제안이나 요령을 알려 주시면 감사하겠습니다.

+0

무엇이 오류 메시지입니까? –

+0

미국 재무부의 오류 메시지는 "예기치 않은 오류가 발생했습니다. 나중에 다시 시도하십시오." –

+0

일반 ** rvest ** 접근 방식은 이제 오류없이 정상적으로 작동합니다. – Deleet

답변

10

글쎄, 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에게보고해야 할 큰 것입니다. 나는이 오래된 질문 알고

+0

굉장! 빠른 답변 감사합니다. httr 솔루션은 훌륭하게 작동하며 원하는 결과를 얻었습니다.나는 버그 리포트를 제출하는 것을 편안하게 느끼기에 충분하지 않다. BTW, rvest에 대한 귀하의 "수정"은 성공적 이었지만 결과를 사용하는 것이 더 쉬웠 기 때문에 httr 솔루션을 사용하기로했습니다. –

+0

@MrFlick 많은 감사합니다! 다른 로그인 양식과 동일한 문제가 발생하여 설명이 문제를 해결했습니다. 방금 [rvest issue] (https://github.com/hadley/rvest/issues/52)를 열었고이 SO 게시물을 참조했습니다. – alex23lemm

0

(rvest_0.1.0에서 테스트), 그러나뿐만 아니라 postForm에 트릭을

style='POST' 

매개 변수를 않습니다 덧붙였다.

관련 문제