0

我需要使用 ruby​​ 从不提供以 (.pdf) 结尾的链接的网站下载 pdf。手动,当我单击链接下载 pdf 时,它会将我带到一个新页面,一段时间后会出现保存/打开文件的对话框。

请帮我下载文件。

链接

4

2 回答 2

4

你这样做

require 'open-uri'
File.open('my_file_name.pdf', "wb") do |file|
  file.write open('http://someurl.com/2013-1-2/somefile/download').read
end

我一直在为我的项目做这件事,而且效果很好。

于 2013-09-07T04:45:08.547 回答
0

如果您只需要一个简单的 ruby​​ 脚本来执行此操作,我只需运行wget. 像这样exec 'wget "http://path.to.the.file/and/some/params"'

不过,此时您不妨运行 wget。

另一种方法是在您知道 pdf 所在的页面上运行 get

source = Net::HTTP.get("http://the.website.com", "/and/some/params")

您可以使用许多其他 http 客户端,但只要您get向 pdf 所在的端点发出请求,它就会为您提供原始数据。然后你可以重命名文件,你就会有pdf

在您的情况下,我运行以下命令来获取 pdf

wget http://www.lawcommission.gov.np/en/documents/prevailing-laws/constitution/func-download/129/chk,d8c4644b0f086a04d8d363cb86fb1647/no_html,1/
mv index.html thefile.pdf

然后打开pdf。请注意,这些是 linux 命令。如果你想用 ruby​​ 脚本获取文件,你可以使用我之前提到的东西。

更新:

还有一个最初没有说明的复杂情况,即每次对 pdf 进行更新时,pdf 的 url 都会更改。为了完成这项工作,您可能想做一些涉及网络抓取的事情。我建议nokogiri。通过这种方式,您可以查看下载所在的页面,然后在所需的 URL 上执行获取请求。此外,托管 pdf 的服务器配置错误,并在打开页面的几秒钟内破坏了 chrome。

如何解决这个问题:我去了网站,刷新了它。然后断开与服务器的连接(按 X,否则会有刷新按钮)。然后右键单击下载链接旁边,然后选择inspect element. 然后浏览 dom 以找到可以明确识别的内容(例如 id)。谢天谢地,我发现了一些东西<strong id="telecharger"> Download</strong>。这意味着您可以使用类似page.css('strong#telecharger')[0].parent['href'] This should give you a URL 之类的东西。然后您可以执行上述获取请求。我没有时间为您制作脚本(工作量太大),但这应该足以解决问题。

于 2013-07-25T00:14:31.537 回答