【问题标题】:R: download pdf embedded in a webpageR:下载嵌入网页的pdf
【发布时间】:2023-03-06 00:40:01
【问题描述】:

试图找到一种更简单的方法来获取此page 中嵌入的 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) 

【问题讨论】:

  • 离题:如果回答对您有帮助,请将过去的问题标记为已解决。
  • @lukeA,是的,你在一个问题上帮助了我,我刚刚接受了你的回答。再次感谢。

标签: r pdf rselenium


【解决方案1】:

需要 IE 才能与该页面进行有效交互是不正确的。在 Mac 上使用 Firefox 或 Chrome 时,数据列上方和左侧的小打印机图标提供“打印此报告”,当鼠标悬停时,单击会导致下载名为“CrystalReportViewer1.pdf”的文件。如果然后使用cross-platform browser-plugin application named 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

您应该使用 RSelenium 将 pdf 文件下载到本地驱动器并从那里处理,而不是尝试从该页面提取 pdf(据我所知,它不是 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 &lt;- remDr$findElement("link text", "Export")

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

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

【讨论】:

  • 谢谢。当我说只有 IE 有效时,我的意思是如果您单击其他浏览器中最底部的按钮,它会弹出错误消息,例如chrome 说“收到了多个不同的 Content-Disposition 标头。不允许这样做以防止 HTTP 响应拆分攻击。”我没有 Mac,所以我不知道您的解决方案是否仍然有效?
  • 没错。使用页面底部的按钮时,我的 Mac 上的 Chrome 和 Firefox 都得到了响应。这就是为什么我尝试在页面顶部使用 Print-to-pdf 机制。
  • 我现在明白你的意思了,我的大脑在与这个网站纠缠数小时后无法工作......所以你是说我需要 Tabula 来调用 R 中的那个打印机图标?我想这里仍然很困惑....我想说的是我可以使用 R 访问最底部的按钮,但是即使我要求 R 单击它们,它也不起作用,因为 Firefox 上的这个错误. R中有没有办法调用那个小打印机按钮?我什至不知道如何在源代码中找到它......
  • 没有。 RSelenium 应该让您致电下载。我提供了 Tabula 作为一种从本地 pdf 文件中提取数据的机制。
  • 我明白了,我真的应该把我的问题改成“如何在 RSelenium 中调用那个小打印机图标。”因为这是我的第二个 R 代码,而且走到这一步已经很头疼了...... .不知道怎么称呼它...
猜你喜欢
  • 2020-11-12
  • 2019-08-10
  • 1970-01-01
  • 2017-09-14
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多