将PDF从iframe刮到R中

将PDF从iframe刮到R中,r,pdf,iframe,web-scraping,R,Pdf,Iframe,Web Scraping,我正试图将联合国安理会(UNSC)决议的文本拼凑成R。联合国以PDF格式保存着UNSC所有决议的在线档案()。因此,理论上,这应该是可以做到的 如果我点击特定年份的超链接,然后点击特定文档的链接(例如),我可以在浏览器中看到PDF。当我试图通过指向URL栏中的链接下载PDF时,它似乎起作用了。但是,当我尝试使用pdftools包中的pdf\u text函数将该文件的内容读入R时,我会收到一堆错误消息 这就是我正在尝试的失败之处。如果您运行它,您将看到我所说的错误消息 library(pdftoo

我正试图将联合国安理会(UNSC)决议的文本拼凑成R。联合国以PDF格式保存着UNSC所有决议的在线档案()。因此,理论上,这应该是可以做到的

如果我点击特定年份的超链接,然后点击特定文档的链接(例如),我可以在浏览器中看到PDF。当我试图通过指向URL栏中的链接下载PDF时,它似乎起作用了。但是,当我尝试使用
pdftools
包中的
pdf\u 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)
库(pdftools)

pdflink您要下载的pdf位于主页的iframe中,因此您正在下载的链接仅包含html。 您需要跟随iframe中的链接以获得pdf的实际链接。在直接链接下载pdf之前,您需要跳转到多个页面以获取cookie/临时URL

以下是您发布的链接示例:

rm(list=ls())
library(rvest)
library(pdftools)

s <- html_session("http://www.un.org/en/ga/search/view_doc.asp?symbol=S/RES/2341(2017)")
#get the link in the mainFrame iframe holding the pdf
frame_link <- s %>% read_html() %>% html_nodes(xpath="//frame[@name='mainFrame']") %>%
  html_attr("src")

#go to that link
s <- s %>% jump_to(url=frame_link)

#there is a meta refresh with a link to another page, get it and go there
temp_url <- s %>% read_html() %>%
  html_nodes("meta") %>%
  html_attr("content") %>% {gsub(".*URL=","",.)} 

s <- s %>% jump_to(url=temp_url)

#get the LtpaToken cookie then come back
s %>% jump_to(url="https://documents-dds-ny.un.org/prod/ods_mother.nsf?Login&Username=freeods2&Password=1234") %>%
  back() 

#get the pdf link and download it
pdf_link <- s %>% read_html() %>% 
  html_nodes(xpath="//meta[@http-equiv='refresh']") %>%
  html_attr("content") %>% {gsub(".*URL=","",.)}

s <- s %>% jump_to(pdf_link)
tmp <- tempfile()
writeBin(s$response$content,tmp)
doc <- pdf_text(tmp)
doc
rm(list=ls())
图书馆(rvest)
图书馆(pdftools)
s%html_节点(xpath=“//frame[@name='mainFrame']”)%>%
html_attr(“src”)
#转到那个链接
s%跳转到(url=帧链接)
#有一个元刷新与链接到另一个页面,得到它,并去那里
临时url%已读html()%>%
html_节点(“元”)%>%
html_attr(“内容”)%>%{gsub('%URL=“,”“,”)}
s%跳转到(url=临时url)
#拿一块意大利饼干回来
s%>%跳转到(url=”https://documents-dds-ny.un.org/prod/ods_mother.nsf?Login&Username=freeods2&Password=1234") %>%
back()
#获取pdf链接并下载它
pdf_链接%read_html()%%>%
html_节点(xpath=“//meta[@http equiv='refresh']”)%>%
html_attr(“内容”)%>%{gsub('%URL=“,”“,”)}
s%跳转到(pdf链接)

tmp您收到了什么错误消息?使用
download.file()
下载文件后是否可以打开该文件?@MrFlick,错误消息堆栈以
error开头:可能不是PDF文件(仍在继续)
,包含大量“非法字符”消息,最后出现
错误:PDF解析失败。
我尝试了你的代码,下载的PDF文件已损坏。当我在浏览器中尝试上述链接时,也会出现一些错误。链接正确吗?@anonR,是的,链接正确。如果我从上面的代码复制并粘贴到Chrome的url栏中,我会得到显示相关分辨率的PDF的页面。@MrFlick,回答您的另一个问题:是。如果我使用页面工具栏上的“下载”按钮手动下载该文件,url显示在我的代码中,并指向该文件的
pdf\u text
,则该文件看起来不错。谢谢。现在,重复一下过去半个世纪无数的决议。。。