用rvest刮掉在线PDF

时间:2017-10-02 19:25:17

标签: html r pdf web-scraping rvest

我想访问此train timetable web page中的数据。在URL上使用rvest并没有给出有用的答案:

> read_html("https://www.scotrail.co.uk/sites/default/files/assets/download_ct/_sr1705_glasgow-edinburgh_via_falkirk_highv2.pdf")

{xml_document}
<html>
[1] <body><p>%PDF-1.5\r%\xe2ãÏÓ\r\n22 0 obj\r&lt;&gt;\rendobj\r               \rxref\r22 97\r0000000 ...
[2] <html><p>C*ÐsO\u0086ZFWM\u0086X H$\u0083&gt;\u0083-Ïs\u0086O=Ì\u008c"Lí½/1\u009c\u009fõ\u008e\u0 ...

然而,当我将源代码保存在本地作为html文件时,我可以很好地抓取内容:

> read_html("/path/to/this/file/_sr1705_glasgow-edinburgh_via_falkirk_highv2.html")
{xml_document}
<html dir="ltr" mozdisallowselectionprint="" moznomarginboxes="">
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n<meta charset="utf- ...
[2] <body tabindex="1" class="">\n    <div id="outerContainer">\n\n      <div id="sidebarContainer"> ...

我想使用网址而不是手动下载并保存为html文件。感觉我错过了一些关于PDF的基本知识。我很困惑,URL中的文件扩展名是.pdf,但F12显示了html。

有没有办法直接从这个网址中删除?如果没有,为什么在本地保存&#39;修复&#39;问题?

1 个答案:

答案 0 :(得分:0)

如果您在名为my_urls的向量中保存了所有网址,则可以对其进行迭代并告诉R下载这些文件。

my_urls <- c("www.pdf995.com/samples/pdf.pdf", 
             "che.org.il/wp-content/uploads/2016/12/pdf-sample.pdf",
             "www.africau.edu/images/default/sample.pdf")
save_here <- paste0("document_", 1:3, ".pdf")

for(i in seq_along(my_urls)){
  download.file(my_urls[i], save_here[i])
}

或者更优雅一点,使用mapply()

mapply(download.file, my_urls, save_here)

执行后,您会看到工作目录中保存了三个名为document_1.pdfdocument_2.pdfdocument_3.pdf的PDF。