从JS重定向链接下载pdf

时间:2014-02-10 10:56:59

标签: javascript linux bash wget

有没有办法从命令行下载以下pdf?

http://www.ofsted.gov.uk/provider/files/1295389/urn/EY298883.pdf   

简单的wget http://www.ofsted.gov.uk/provider/files/1295389/urn/EY298883.pdf会返回一个网页。但是如果你在firefox中找到它,你会得到一个pdf。

How to get a JS redirected pdf linked from a web page相关,我试图找到一个python解决方案。

2 个答案:

答案 0 :(得分:1)

如果您不需要模拟Web浏览器并运行JS的通用答案(您需要这样做以获得通用解决方案),但只需从您自己获得的html中找到下载链接就可以了,那么你可以:

  1. wget页面(wget将遵循HTTP重定向,以便这将为您提供目标html与JS进行下载)
  2. 然后你需要解析HTML并找到你正在寻找的链接
  3. 您需要wget该链接
  4. 我在https://github.com/pjump/wgetbyCss写了一些简单的脚本来为你做2,3 要使用它们,您需要

    • 红宝石
    • 机械宝石(gem install mechanize

    然后你可以这样做:

     ./wget_by_link_text 'http://www.ofsted.gov.uk/filedownloading/?id=1295389&type=1&refer=1' "Please download the requested file here"
    

    即:

       ./wget_by_link_text url link_text [save_as]
    

    通过文字获取该链接。或者,您可以使用wget_by_css脚本并通过其.auto_click类或其他一些css选择器获取链接。

答案 1 :(得分:-1)

简而言之:您无法使用wget / curl

您可以使用curl -L约束curl来关注重定向

 curl -L http://www.ofsted.gov.uk/provider/files/1295389/urn/EY298883.pdf

但它不起作用,因为你可以看到curl-FAQ

  

4.14重定向在浏览器中工作,但不能用于卷曲!

     

curl支持HTTP重定向正常(参见第3.8项)。浏览器一般   支持至少两种其他方式来执行curl所做的重定向   不:

     

元标记。您可以编写一个HTML标记,该标记将导致浏览器   在一段时间后重定向到另一个给定的URL。

     

的Javascript。您可以编写嵌入HTML页面的Javascript程序   将浏览器重定向到另一个给定的URL。

     

没有办法让卷曲跟随这些重定向。你必须要么   手动确定页面设置要执行的操作,或者编写脚本   解析结果并获取新URL。

所以我认为是坏消息,您必须在脚本中自行完成,请将您的其他问题视为参考:How to get a JS redirected pdf linked from a web page


考虑使用seleniumhq女王网站似乎对抓取者来说是一个难题。