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

标签 python bash cookies urllib2 wget

我试图弄清楚如何从 zippy share 等网络托管网站下载文件。我看到这个帖子How to download in bash from zippyshare?它展示了如何使用 wget,并从浏览器手动添加 cookie,并将其添加到 wget 的 header 中。这样可行。但我想使用 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 的代码,因为我正在使用 session 来发出请求...但仍然没有执行: 查看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()

最佳答案

在没有其他选择的情况下,才应该在 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。

关于python - 使用 urllib2 和/或 wget 自动下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664836/

相关文章:

python - 为什么我的 AWS SQS 消息没有被删除?

javascript - 在浏览器中模拟linux终端

用于在文件名中添加前导零的 Linux shell 脚本

linux - 运行 yum 命令并通过电子邮件发送结果...全部在 cron bash shell 作业中

linux - 使用 fdisk 的 Bash 脚本

当页面等于 X 时,javascript 逻辑运算符不执行功能

python - 在 Pandas 中迭代生成列名

python - 暂时禁用 Django 缓存

asp.net - 如何使我的 asp.net 网站 "more cookie free"?

tomcat - 为什么在启用 cookie 时 jsessionid 出现在 Wicket URL 中?