【问题标题】:python downloading data (urllib, urllib2)python下载数据(urllib,urllib2)
【发布时间】:2011-06-24 07:49:19
【问题描述】:

我有一个类似this 的链接,直接指向一个mp3 文件。所以当我把它放在我的浏览器中时,基本上会问我是否要下载文件,但是当我通过以下代码对 python 做同样的事情时:

> data = urllib2.urlopen("http://www23.zippyshare.com/d/44123087/497548/Lil%20Wayne%20ft.%20Eminem%20-%20Drop%20The%20World.mp3".read())

我将重定向到另一个这样的链接。因此,我得到的不是 MP3 数据,而是

的 html 代码

'http://www23.zippyshare.com/v/44123087/file.html'

有什么想法吗? 谢谢

【问题讨论】:

  • sh0w u5 t3h c0d3z, l33t h4x0R。你可能没有处理 cookie?
  • 我正在使用 urllib2,它应该会自动处理 cookie,不过我不太确定!
  • 确实如此,但需要一些努力。你至少必须告诉它这就是你想要的。为 urllib2 cookielib 做一些谷歌搜索
  • 刚刚尝试了其中一个人发布的代码,但不起作用,无论如何谢谢

标签: python html mp3 urllib2 urllib


【解决方案1】:

urllib2 透明地处理重定向。您可能想查看服务器在呈现此类重定向时实际在做什么,以及允许您下载。您可能想subclass 重定向处理程序并查看标头的哪个属性为您提供 url 并使用 urlretrieve 下载。

设置 cookie,显式尝试也可能是一个不错的尝试。

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.open('yourmp3filelink')

【讨论】:

  • 我尝试了代码,但不起作用,我会给子类一个机会
  • 另外,看看 curl 在你提供 url 时做了什么。
【解决方案2】:

您的链接重定向到 HTML 网页,很可能是因为您的下载请求超时。这些下载网站通常是这样工作的:您永远不会获得下载的静态链接,只会获得一个临时分配的链接。

我的猜测是无法使用该网站获取该静态链接。您必须知道该文件实际上来自哪里。

所以不,您的 python 代码没有任何问题;只是你的来源。

【讨论】:

  • @patrick perini 但是为什么当我使用我的浏览器时它会起作用?那是我不明白的部分!
  • 因为您已经访问过该网站并且该临时分配的链接仍然对您有好处。一旦您的会话/cookie(无论是什么情况)到期,该链接将停止工作。从技术上讲,你可以用 python 做同样的事情(通过处理 cookie),但它不可靠、不可重复、不可扩展或便携。你最好点击链接。
  • 我在 2 小时前获得了链接,它在我所有的浏览器(firefox、chrome 和 explorer)上都可以正常工作,但它不适用于 urllib 而不是 urllib2 !如果我要处理 urllib2 cookielib,我不太确定该使用什么!你能不能给我看一个快速的例子:)
  • 实际上,如果它在您的所有浏览器上都运行,那么它就是一个会话。意思是服务器端,意思是你不能影响它。尝试让 python 浏览该 HTML 以找到可以尝试的新链接。这就是你所能做的。
  • 好吧,这就是我一直在做的,但仍然不快乐!还是谢谢
猜你喜欢
  • 2011-06-13
  • 2016-03-11
  • 1970-01-01
  • 2014-08-15
  • 2016-09-18
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多