Это один из тех, кто действительно, ужасно, убогие сайты SharePoint, которые появляясь как сумасшедший почти по всем правительственным электронным инициативам в глобальном масштабе и делая данные более или менее непрозрачными.
Сказав это, я совершенно поражен, что это работает:
library(httr)
library(xml2)
res <- POST(url = "http://www.adviserinfo.sec.gov/IAPD/Content/BulkFeed/CompilationDownload.aspx?FeedPK=37264&FeedType=IA_FIRM_SEC",
httr::add_headers(Origin = "http://www.adviserinfo.sec.gov"),
body = list(`__EVENTTARGET` = "ctl00$cphMain$lnkSECReport"),
encode = "form")
Я использовал curlconverter
для извлечения веб-вызова после отмены прямой загрузки и просмотра рулонного вызова в инструментах разработчика (который должен был быть до перед началом загрузки).
Под «сырым», рассчитанная httr
функция запроса выглядит следующим образом:
httr::VERB(verb = "POST", url = "http://www.adviserinfo.sec.gov/IAPD/Content/BulkFeed/CompilationDownload.aspx?FeedPK=37264&FeedType=IA_FIRM_SEC",
httr::add_headers(Origin = "http://www.adviserinfo.sec.gov",
`Accept-Encoding` = "gzip, deflate", `Accept-Language` = "en-US,en;q=0.8",
`Upgrade-Insecure-Requests` = "1", `User-Agent` = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
`Cache-Control` = "max-age=0", Referer = "http://www.adviserinfo.sec.gov/IAPD/InvestmentAdviserData.aspx",
Connection = "keep-alive", DNT = "1"), httr::set_cookies(ASP.NET_SessionId = "vp5bt2nrl5m3l4tqq4mkbfrz"),
body = list(`__EVENTTARGET` = "ctl00$cphMain$lnkSECReport",
`__EVENTARGUMENT` = "", `__VIEWSTATE` = "/wEPDwUIOTg2OTY2NjYPZBYCZg9kFgQCAQ8WAh4EVGV4dAUeSUFQRCAtIEludmVzdG1lbnQgQWR2aXNlciBEYXRhZAIDD2QWAgIFD2QWEAIDDw8WAh4LUG9zdEJhY2tVcmwFUn4vSUFQRC9Db250ZW50L0J1bGtGZWVkL0NvbXBpbGF0aW9uRG93bmxvYWQuYXNweD9GZWVkUEs9MzcyNjQmRmVlZFR5cGU9SUFfRklSTV9TRUMWAh4Hb25jbGljawWvAWdhKCdzZW5kJywgJ3BhZ2V2aWV3JywgeydwYWdlJzogJ34vSUFQRC9Db250ZW50L0J1bGtGZWVkL0NvbXBpbGF0aW9uRG93bmxvYWQuYXNweD9GZWVkUEs9MzcyNjQmRmVlZFR5cGU9SUFfRklSTV9TRUMnLCAndGl0bGUnOiAnSUFQRCAtIFNFQyBJbnZlc3RtZW50IEFkdmlzZXIgUmVwb3J0IChHWklQKSd9KTtkAgcPZBYCZg8PFgIfAAVKUmVwb3J0IGFzIG9mOiA8Yj5TZXB0ZW1iZXIgNiwgMjAxNjwvYj4gPGJyLz5BcHByb3hpbWF0ZSBmaWxlIHNpemU6IDM3IE1CICBkZAINDw8WAh8BBVR+L0lBUEQvQ29udGVudC9CdWxrRmVlZC9Db21waWxhdGlvbkRvd25sb2FkLmFzcHg/RmVlZFBLPTM3MjY1JkZlZWRUeXBlPUlBX0ZJUk1fU1RBVEUWAh8CBbMBZ2EoJ3NlbmQnLCAncGFnZXZpZXcnLCB7J3BhZ2UnOiAnfi9JQVBEL0NvbnRlbnQvQnVsa0ZlZWQvQ29tcGlsYXRpb25Eb3dubG9hZC5hc3B4P0ZlZWRQSz0zNzI2NSZGZWVkVHlwZT1JQV9GSVJNX1NUQVRFJywgJ3RpdGxlJzogJ0lBUEQgLSBTdGF0ZSBJbnZlc3RtZW50IEFkdmlzZXIgUmVwb3J... <truncated>
`__VIEWSTATEGENERATOR` = "C7F140E8", `__PREVIOUSPAGE` = "_n_AIWFFdFo0uFQroVexEbLyjk41mQczgUv0yM_5WfsMAs5Mr4_W9OsfhauW1md49E6AtLMLKvwsM3efjdsFxSQVs8m60rXjM2G3a38s-vs9jeifY7Z97KwNciQDnS3E0",
`__EVENTVALIDATION` = "/wEdAAQgBK7oCoSH1SyM/nnv4+7OQ6BBh5UglL0V4PbvTmfHL5ETgQBTBoVSpnQmZd0nxKz/1ubqHHzGDP0ztOLUKJjXWi90IlgKV4uaEBSHcRvGBiO1/K20oSh88Xa2qq9BBCI="),
encode = "form")
и это был мой опыт, что эти действительно дурные сайты SharePoint нужны различные «состояния отображения» информации, но я выстрелил в сокращая и преобразуя вызов, и он работает (по крайней мере, через 2 минуты после того, как я отправился на сайт изначально).
Вы не из леса еще так:
res$headers$`content-type`
## "application/x-gzip; charset=utf-8"
даже если добавить:
`Accept-Encoding` = "gzip, deflate"
к add_headers()
вызову.
Таким образом, поскольку memDecompress()
абсолютно бесполезная функция, вам нужно:
writeBin(content(res, as="raw"), "report.gz")
Чтобы получить архив gzip содержимое в файл.
Теперь мы можем работать с ним напрямую:
gzf <- gzfile("report.gz")
doc <- read_xml(gzf)
## [1] "LAUNCH ANGELS MANAGEMENT COMPANY, LLC" "JACOBSEN CAPITAL MANAGEMENT, LLC"
## [3] "CORESTATES CAPITAL ADVISORS, LLC" "MINNEAPOLIS PORTFOLIO MANAGEMENT GROUP, LLC"
## [5] "SHANNON RIVER FUND MANAGEMENT, LLC" "AAC BENELUX HOLDING BV"
## [7] "WILLINK ASSET MANAGEMENT LLC" "SPIVAK ASSET MANAGEMENT, LLC"
## [9] "ANNALY MANAGEMENT COMPANY LLC" "WOODMONT INVESTMENT COUNSEL, LLC"
close(gzf)
xml_find_all(doc, ".//Firms/Firm/Info") %>%
xml_attr("LegalNm") %>%
head(10)
Я не пробовал, но я подозреваю, что вы можете взять с собой:
javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(
-----> "ctl00$cphMain$lnkStateReport",
"",
false,
"",
-----> "Content/BulkFeed/CompilationDownload.aspx?FeedPK=37265&FeedType=IA_FIRM_STATE",
false,
true))
элементы, определенные ----->
и поместить их в очевидные места в url
и body
области для получения другого контента.Эти параметры взяты из источника ссылок кнопки «Государственный инвестиционный советник».
Если вы действительно не хотите, чтобы написать содержание в файл, вы можете попробовать не подвергавшихся воздействию функции в альфа-пакет шахты раздувать архив gzip необработанный содержимое непосредственно в R:
devtools::install_git("https://gitlab.com/hrbrmstr/warc.gz")
raw_report <- warc:::gzuncompress(content(res, as="raw"), 50*1024*1024)
doc <- read_xml(raw_report)
...
Пробовали ли вы ссылку в этом коде? ... http://www.adviserinfo.sec.gov/IAPD/InvestmentAdviserData.aspx/Content/BulkFeed/CompilationDownload.aspx?FeedPK=37264&FeedType=IA_FIRM_SEC – cory
Да. Спасибо. Теперь взглянуть на RCurl, который может предложить решение. Будет пост, если я могу его найти. – BlueDevilPride
'a <- httr :: GET (url)', за которым следует 'httr :: content (a)' получает анализируемый XML-документ – cory