Python 下载数据(urllib,urllib2)
我有一个链接,比如这个,它直接指向一个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'
有没有什么想法?谢谢!
2 个回答
0
你的链接会跳转到一个HTML网页,这很可能是因为你的下载请求超时了。这种下载网站通常都是这样运作的:你永远得不到一个固定的下载链接,只有一个临时分配的链接。
我猜在那个网站上是无法获取到固定链接的。你需要知道那个文件实际上是从哪里来的。
所以,不是你的Python代码有问题,而是你的下载来源有问题。
2
urllib2这个库在处理重定向时非常自动化,不需要你手动去做。你可能想知道服务器在进行重定向时到底在干什么,以及它是如何让你下载文件的。你可以考虑创建一个重定向处理器的子类,这样你就能查看头信息中哪个属性提供了网址,然后用urlretrieve来下载那个网址的内容。
设置cookies也是一个不错的尝试,特别是你可以明确地去做这件事。
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.open('yourmp3filelink')