2016-04-01 3 views
1

Попытка найти более простой способ, чтобы захватить таблицу в формате PDF, встроенный в этом page или даже лучше, скачать PDF в локальный диск:R: скачать PDF встроенный в веб-страницу

Мой код находится ниже и результаты являются беспорядочными ...

PS: ни одна из кнопок в нижней части веб-страницы не работает, если вы не используете IE, а IE с RSelenium ... Я создал код для загрузки страницы в IE, можно успешно нажать на любая из кнопок, чтобы загрузить файл excel (застрял на шаге, где он всплывает окно, чтобы попросить меня открыть или сохранить) или открыть pdf в текущем окне, но та же проблема, не знаю, как захватить PDF. Так что тупики повсюду.

Заранее спасибо.

library(RSelenium) 
checkForServer() 
startServer() 
remDr<-remoteDriver$new() 
url<-"http://www.dmo.gov.uk/ceLogon.aspx?page=about&rptCode=D10A" 
remDr$open(silent = TRUE) #opens a browser 
remDr$navigate(url) 
doc <- htmlParse(remDr$getPageSource()[[1]]) 

table <- readHTMLTable(doc, header=NA, stringsAsFactors=TRUE) 
+0

Не по теме: Пожалуйста, отметьте прошлые вопросы, как решить, если ответ вам помог. – lukeA

+0

@ lukeA, да, вы помогли мне по одному вопросу, и я только что принял ваш ответ. Еще раз спасибо. –

ответ

1

Неправильно, что IE необходим для эффективного взаимодействия с этой страницей. Используя Firefox или Chrome на Mac, маленький значок принтера, расположенный выше и слева от столбцов данных, предлагает «Печать отчета» при запуске и при нажатии вызывает загрузку файла с именем «CrystalReportViewer1.pdf». Если затем использовать cross-platform browser-plugin application named Tabula, вы можете извлечь данные в форме csv. Верхняя часть извлеченных данных (на 1 апреля 2016 года) выглядит следующим образом:

Syndication ,Gilt Name ,Amount Sold ,Issue ,Issue ,Announcement ,Results 
Date ,"",(£ million ,Price (£) ,Yield ,Press Release ,Press Release 
"","",nominal),"","","","" 
23 Feb 2016 ,0 1/8% Index-linked Treasury Gilt 2065 ," 2,750.0 ", 163.73 ,-0.8905% ,Announcement ,Results 
01 Dec 2015 ,0 1/8% Index-linked Treasury Gilt 2046 ," 3,250.0 ", 129.74 ,-0.7475% ,Announcement ,Results 
20 Oct 2015 ,2½% Treasury Gilt 2065 ," 4,750.0 ", 98.40 , 2.5570% ,Announcement ,Results 
22 Sep 2015 ,0 1/8% Index-linked Treasury Gilt 2068 ," 2,500.0 ", 166.00 ,-0.8655% ,Announcement ,Results 
21 Jul 2015 ,3½% Treasury Gilt 2068 ," 4,000.0 ", 121.31 , 2.7360% ,Announcement ,Results 

Вместо того, чтобы извлечь PDF из этой страницы (которая не в форме Pdf, насколько я могу судить), вы должны использовать вместо RSelenium загрузит файл pdf на локальный диск и обработает его оттуда.

Это кнопка ID:

{'id':'CrystalReportViewer1_toptoolbar_print'} 

Есть демки в RSelenium страницах справки. Один из них имеет право: selDownloadZip.R. Он показывает, как выполнить «щелчок» на «элемент страницы»:

webElem <- remDr$findElement("id", "CrystalReportViewer1_toptoolbar_print") 
webElem$clickElement() 

Затем, глядя на «элемент Ревизоре» в панели ViewSource Firefox, я вижу имя кнопки («ID», «theBttnbobjid_1459536946505_dialog_submitBtn»), поэтому нужен еще один щелчок. Однако это число изменяется при каждом доступе страницы, поэтому используйте webElem <- remDr$findElement("link text", "Export")

webElem <- remDr$findElement("link text", "Export") 
webElem$clickElement() 

Было бы неплохо, чтобы просмотреть страницу помощи webElement класса.

enter image description here

+0

Спасибо. Когда я сказал, что только IE работает, я имел в виду, если вы нажмете на кнопки в самом низу в других браузерах, он выдает сообщение об ошибке, например. Хром говорит: «Получено несколько разных заголовков Content-Disposition. Это запрещено для защиты от атак, связанных с ответом HTTP-ответа». У меня нет Mac, поэтому я не знаю, будет ли ваше решение работать? –

+0

Точно. Я получил этот ответ от Chrome и Firefox на моем Mac, используя кнопки внизу страницы. Именно поэтому я попытался использовать механизм Print-to-pdf в верхней части страницы. –

+0

Я понимаю, что вы имеете в виду сейчас, мой мозг просто не работает после нескольких часов отладки с этим сайтом ... Итак, вы говорите, что мне нужна Tabula для вызова этого значка принтера в R? Я думаю, все еще запутался здесь. Все, что я пытаюсь сказать, это то, что я могу использовать R для доступа к кнопкам в самом низу, но даже если я попрошу R нажать на них, это не сработает, потому что эта ошибка в firefox , Есть ли способ в R вызвать эту маленькую кнопку принтера?Я не знаю, как найти его в исходном коде ... –