【问题标题】:Downloading links with Python urllib2使用 Python urllib2 下载链接
【发布时间】:2014-11-18 19:52:08
【问题描述】:

我想从一个页面下载一个 mp3,但我得到的只是 html,而不是 mp3 本身。我正在使用的代码来自此链接:https://stackoverflow.com/a/16518224/2137668

为什么我无法获得 mp3?这是一个测试示例,显示它以 html 格式下载:http://www5.zippyshare.com/d/77609120/61098/Cleavage%20-%20Prove%20%28Original%20Mix%29%20%5bquality-dance-music.com%5d.mp3

【问题讨论】:

  • 当您浏览图片、歌曲和视频等内容时,许多网站都会为您提供“容器页面”。这可能是为了改善您的用户体验,让其他网站更难“深度链接”他们的内容,或者让您更难“窃取”他们的内容。
  • 如果您单击该链接,它会立即尝试下载 mp3,在 chrome 中。刚刚检查了 Safari,现在看到了您所说的重定向。
  • 如果我点击该链接,它会将我带到一个网页,我可以在该网页上聆听歌曲,点击另一个链接下载它,比如在 Facebook 上点赞等等。
  • 是的,当我使用 Safari 时,我现在看到了重定向。但是使用chrome时,链接只是弹出下载弹窗。
  • 我怀疑区别在于 Chrome 与 Safari。更有可能是您点击链接的方式有所不同。可能是您是从 HTML 页面还是从其他地方单击链接(基于 Referer 标头),或者您是否在通过在 HTML 页面上执行某些操作获取 cookie 后单击了链接,或者谁知道是什么。有关详细信息,请参阅我的答案。

标签: python html download mp3 urllib


【解决方案1】:

当我尝试在网络浏览器中或使用wget 打开该 URL 时,我得到一个 302 重定向到 http://www5.zippyshare.com/v/77609120/file.html,这当然是一个 HTML 页面。

当您浏览图片、歌曲和视频等内容时,许多网站会将您重定向到此类“容器页面”(或直接返回)。这可能是为了改善您的用户体验,让其他网站更难“深度链接”他们的内容,或者让您更难“窃取”他们的内容。

如果它是前两个之一,答案通常很简单:添加一个Referer 标头,指向您从中获得链接的下载页面(或者,有时,指向同一站点上的任何内容——甚至是相同的 URL您正在下载)。

如果是第三个,他们通常会提供比这更多的保护。仅举一个例子,他们可能会要求您拥有一个 cookie,该 cookie 是您坐在下载页面上并等待 30 秒的计时器,并且仅在 30 分钟内有效。

如果您对 HTTP 和 JavaScript 有足够的了解,并且不在乎违反他们的服务条款,那么您通常可以对他们的每项保护措施进行逆向工程,并为自己编写一个下载脚本,该脚本将一直有效,直到他们接下来做出改变月,但通常不值得这样做。

无论如何,鉴于此站点名为 zippyshare,我猜它是其中的最后一个。这些类型的网站通过每次下载文件时向您展示广告,并提示您支付月费以获得直接/加速/任何下载等方式赚钱,因此他们将各种障碍置于直接下载文件而无需看到这些广告或支付费用的方式。

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多