Написание функции, которая очищает набор данных, который появляется только после ввода значений и нажатия кнопки - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь написать функцию, которая будет принимать список дат и извлекать набор данных, найденный в https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm

. Я использую PROC IML в SAS для выполнения R-кода (поскольку я болеезнакомы с R).

Моя проблема связана с R и связана с сайтом.

Во-первых, я знаю, что есть API, но это упражнение, которое я действительно хочу изучитьпотому что многие сайты не имеют API.

Кто-нибудь знает, как получить наборы данных?

То, что я слышал:

  1. Использовать RSelenium длязапрограммировать щелчокRSelenium был недавно удален из архива, так что это не вариант (даже загрузка его из предыдущей версии вызывает проблемы).

  2. Посмотрите на изменения URL-адреса XML, когда я нажимаюкнопка «отправить» в Chrome.Однако в XML-коде на вкладке «Сеть» ничего не отображается, тогда как на других веб-сайтах с другими методами поиска они отображаются.

Я искал решение целый день, но чтобыбезрезультатно!Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете выполнить ту же обработку http в сеансе SAS, используя Proc HTTP. Данные CSV не содержат строку заголовка, поэтому, возможно, формат XML является более подходящим. Есть несколько предостережений для сайта treasurydirect.

  • Перед отправкой запроса на загрузку данных для подключения требуются файлы cookie, которые назначаются во время запроса GET. Proc HTTP может сделать это.
  • XML содержит дополнительный контейнер тегов <bpd>, с которым движок библиотеки SAS XMLV2 просто не может справиться. Этот дополнительный тег можно удалить с помощью некоторого шага обработки данных.

Пример кода для 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®: как использовать SAS, чтобы получить ОТДЫХ
Джозеф Генри, SAS Institute Inc., Кэри, Северная Каролина
http://support.sas.com/resources/papers/proceedings16/SAS6363-2016.pdf

0 голосов
/ 16 мая 2018

Во-первых, вам необходимо прочитать положения и условия и убедиться, что вы не нарушаете правила при очистке.

Далее, если есть 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...