1

试图找到一种更简单的方法来获取此页面中嵌入的 pdf 中的表格,或者甚至更好,将此 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) 
4

1 回答 1

1

需要 IE 才能与该页面进行有效交互是不正确的。在 Mac 上使用 Firefox 或 Chrome 时,数据列上方和左侧的小打印机图标提供“打印此报告”,当鼠标悬停时,单击会导致下载名为“CrystalReportViewer1.pdf”的文件。如果使用名为 Tabula 的跨平台浏览器插件应用程序,您可以提取 csv 格式的数据。提取数据的顶部(2016 年 4 月 1 日)如下所示:

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()

然后查看 Firefox 的 ViewSource 面板中的“元素检查器”,我看到了按钮的名称(“id”、“theBttnbobjid_1459536946505_dialog_submitBtn”),因此需要进一步单击。但是,该数字会随着每次页面访问而变化,因此请使用 webElem <- remDr$findElement("link text", "Export")

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

查看 webElement-class 帮助页面是个好主意。

在此处输入图像描述

于 2016-04-01T18:36:39.603 回答