【发布时间】:2017-07-13 00:46:50
【问题描述】:
我正在尝试将联合国安理会 (UNSC) 决议的文本抓取到 R 中。联合国以 PDF 格式 (here) 维护所有联合国安理会决议的在线存档。所以,理论上,这应该是可行的。
如果我单击特定年份的超链接,然后单击特定文档的链接(例如,this one),我可以在浏览器中看到 PDF。当我尝试通过将download.file 指向 URL 栏中的链接来下载该 PDF 时,它似乎可以工作。但是,当我尝试使用 pdftools 包中的 pdf_text 函数将该文件的内容读入 R 时,我收到一堆错误消息。
这就是我正在尝试但失败的方法。如果你运行它,你会看到我所说的错误消息。
library(pdftools)
pdflink <- "http://www.un.org/en/ga/search/view_doc.asp?symbol=S/RES/2341(2017)"
tmp <- tempfile()
download.file(pdflink, tmp, mode = "wb")
doc <- pdf_text(tmp)
我错过了什么?我认为这与这些文件的可下载版本的链接地址与浏览器内显示的链接地址不同有关,但我不知道如何获取前任的。我尝试右键单击下载图标;使用 Chrome 中的“检查”选项查看标识为“src”的 URL (this link);并将我的其余过程指向它。同样,download.file 部分执行,但是当我运行pdf_text 时,我得到了相同的错误消息。我还尝试 a) 将调用的 mode 部分更改为 download.file 和 b) 将“.pdf”附加到 tmp 路径的末尾,但这些都没有帮助。
【问题讨论】:
-
您收到什么错误消息?下载后可以用
download.file()打开文件吗? -
@MrFlick,错误信息栈以
error: May not be a PDF file (continuing anyway)开头,包含一堆“非法字符”信息,以Error: PDF parsing failure.结尾 -
我试过你的代码,下载的 pdf 文件已损坏。当我在浏览器中尝试上述链接时,它也会出现一些错误。链接是否正确?
-
@anonR,是的,链接是正确的。如果我从上面的代码中复制它并将其粘贴到 Chrome 的 url 栏中,我会得到显示相关分辨率的 PDF 的页面。
-
@MrFlick,回答您的另一个问题:是的。如果我使用页面上工具栏上的下载按钮手动下载文件,并使用我的代码中显示的 url 并将
pdf_text指向该文件,它读取正常。
标签: r pdf iframe web-scraping