使用urllib2和/或wget自动下载文件

时间:2014-12-27 06:00:32

标签: python bash cookies urllib2 wget

我试图找出如何从像zippy share这样的网站托管网站下载文件。我看到这篇文章How to download in bash from zippyshare?展示了如何使用wget,并从浏览器中手动添加cookie并将其添加到wget中的标题中。这样可行。但是我想使用python,然后获取cookie然后执行wget,以便我可以以编程方式执行此操作(例如:抓取一堆下载链接)。

我想出了这个hacky脚本来获取cookie并执行wget命令,但似乎cookie不好,因为我得到302重定向:

import urllib2, os
class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

url = "http://www67.zippyshare.com/d/64003087/2432/Alex%20Henning%2c%20Laurie%20Webb%20-%20In%20Your%20Arms%20%28Joy%20Kitikonti%20Remix%29%20%5bquality-dance-music.com%5d.mp3"
referer = "http://www67.zippyshare.com/v/64003087/file.html"
response = urllib2.urlopen(HeadRequest(url))

headers = response.info()
jcookieString = headers['Set-Cookie'].split(';')[0] #[11:]
# print headers
print "jcookie string " + jcookieString

wgetString = "wget " + url + " --referer=" + referer + " --cookies=off --header \"Cookie: " + jcookieString + "\"" + "--user-agent=\"Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1\""
os.system(wgetString)

我也尝试过使用python的cookielib,但得到了302重定向的相同行为。感谢。

编辑:在这里使用请求的代码现在是持久化来自引用请求的cookie,因为我正在使用会话来发出请求......但仍然没有去: 看看response.history显示302重定向仍然出于某种原因。

import requests

downloadUrl="http://www67.zippyshare.com/d/3278160/42939/Andre%20Nazareth%20-%20Bella%20Notte%20%28Original%20Mix%29%20%5bquality-dance-music.com%5d.mp3"
referer= "http://www67.zippyshare.com/v/3278160/file.html"
header={"user-agent": "\"Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1\"", 'referer': referer}
refererSession = requests.Session()
refererSession.get(referer)

downloadResponse = refererSession.get(downloadUrl, headers=header)
print downloadResponse.request.headers
print downloadResponse.status_code
if downloadResponse.status_code == 200:
    mp3Name = "song2.mp3"
    song = open(mp3Name, "wb")
    song.write(downloadResponse.content)
    song.close()

1 个答案:

答案 0 :(得分:4)

在python中使用系统调用应该留给没有其他选择的情况。使用请求库,如下所示:

import requests
header={"user-agent":\"Mozilla/5.0 (Windows NT 6.0) Gecko/20100101 Firefox/14.0.1\"",
'referer': referer}
cookies = dict(cookie_name='cookie_text')
r = requests.get(url, header=header, cookies=cookies)

如果它不起作用,可能设置本身并不适合您要做的事情。我很困惑为什么你们都设置了cookie并在wget语句中使用了cookies = off。