我正在尝试编写一个函数,该函数将获取日期列表并检索https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm上的数据集
我在SAS中使用PROC IML来执行R代码(因为我对R更熟悉)。
我的问题在R内,并且归功于网站。
首先,我知道有一个API,但这是一个我真正想要学习的练习,因为很多站点都没有API。
有谁知道如何检索数据集?
我听到的事情:
使用RSelenium对点击进行编程。 RSelenium最近从存档中删除了,因此这不是一个选项(即使从以前的版本下载它也会导致问题)。
点击Chrome中的“提交”按钮,查看XML网址更改。但是,“网络”选项卡中的XML不显示任何内容,而在其他具有不同搜索方法的网站上则显示。
我一直在寻找解决方案,但无济于事!请帮忙
答案 0 :(得分:1)
首先,您需要阅读条款和条件,并确保在抓取时不违反规则。
接下来,如果有API,您应该使用它,以便他们可以更好地管理他们的数据使用和操作。
此外,您还应限制发出的请求数,以免服务器过载。如果我没有错,这与DNS拒绝服务攻击有关。
最后,如果满足上述条件,您可以使用Chrome上的检查器查看浏览这些网页时发出的HTTP请求。
在这种特殊情况下,您不需要RSelenium,只需要一个简单的HTTP POST
library(httr)
resp <- POST("https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm",
body=list(
priceDate.month=5,
priceDate.day=15,
priceDate.year=2018,
submit="CSV+Format"
),
encode="form")
read.csv(text=rawToChar(resp$content), header=FALSE)
答案 1 :(得分:0)
您可以使用Proc HTTP
在SAS会话中执行相同的http处理。 CSV数据不包含标题行,因此XML格式可能更合适。 treasurydirect网站有几点需要注意。
<bpd>
,SAS XMLV2库引擎无法简单处理。可以使用一些DATA步骤处理删除此额外标记。XML的示例代码
filename response TEMP;
filename respfilt TEMP;
* Get request sets up fresh session and cookies;
proc http
clear_cache
method = "get"
url ="https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
;
run;
* Post request as performed by XML format button;
* automatically utilizes cookies setup in GET request;
* in= can now directly specify the parameter data to post;
proc http
method = "post"
in = 'priceDate.year=2018&priceDate.month=5&priceDate.day=15&submit=XML+Format'
url ="https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
out = response
;
run;
* remove bpd tag from the response (the downloaded xml);
data _null_;
infile response;
file respfilt;
input;
if _infile_ not in: ('<bpd', '</bpd');
put _infile_;
run;
* copy data collections from xml file to tables in work library;
libname respfilt xmlv2 ;
proc copy in=respfilt out=work;
run;
参考资料
使用SAS®轻松实现REST:如何使用SAS获取REST Joseph Henry,SAS Institute Inc.,Cary,NC
http://support.sas.com/resources/papers/proceedings16/SAS6363-2016.pdf