可以使用requests模块完成下载
10年积累的成都做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有余江免费网站建设让你可以放心的选择与我们合作。
# --------------------第一种:使用headers携带cookie-----------------------------
# coding = utf-8
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64),
'Cookie':'你的cookies',
}
# 发起请求,获取二进制数据
html_str = requests.get(url,headers=headers).content
# 写入文件,采用二进制写入文件
with open('路径/文件名.后缀','wb') as f:
f.write(html_str)
# --------------------第二种:在requests直接携带--------------------------------
# coding = utf-8
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64),
}
cookies = {你的cookies,这里必须是以键值对,也就是字典的形式}
# 发起请求,获取二进制数据
html_str = requests.get(url,headers=headers,cookies = cookies).content
# 写入文件,采用二进制写入文件
with open('路径/文件名.后缀','wb') as f:
f.write(html_str)
python一堆文件解压方法如下。
压缩包解压要用的是zipfile这个包。
zip_file = zipfile.ZipFile(r'D:\数据源\XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:\数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!') # 当然我是不需要查收的(*/ω\*)
这里的解压操作实际就相当于鼠标右键“解压到当前文件夹”的效果。
完成解压后运行.close()是个比较好的习惯,否则可能会导致包括但不限于:
文件会一直被占用着,可能无法重新打开;
在进程结束之前文件都删不掉;
文件内容不能即时 flush 到磁盘直到进程结束;
到此,整个流程在无需打开浏览器和文件夹的情况下便自动完成了。
为了方便日常运行代码,这里把上面的两个流程包装成一个函数,下载解压
#下载昨日日志
def download_XXlog():
yday = (date.today()+timedelta(days=-1)).strftime('%Y%m%d') # 获取昨日日期
r = requests.get(''%yday) # 获取以日期命名的压缩包信息
with open(r'D:\数据源\XX_%s.zip'%yday,'wb') as code: # 将压缩包内容写入到 "D:\数据源\" 下,并按日期命名
code.write(r.content)
print('昨日XX日志下载完成。')
zip_file = zipfile.ZipFile(r'D:\数据源\XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:\数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!')
download_XXlog()
拓展
作为拓展,这里再加一个可以根据实际情况输入(input)起始和终止日期,来下载一个特定时间段日志的函数,这里就涉及了datetime和time这两个工具包了。
知道文件的url地址就用urllib模块的urlretrieve函数。urllib.urlretrieve(url,
filename)filename是要保存到本地的文件名。函数后面还有2个可选参数,要用就看帮助文档吧。多线下载的话,每一线程要指定下载服务器上文件的哪一块。http协议中head里可以指定Range。下面用的是urllib2模块request
=
urllib2.Request(url)request.add_header("Range",
"bytes=%d-%d"%(1024,
204)
#指定下载文件的范围opener
=
urllib2.build_opener()data
=
opener.open(request).read()现在data里面就是文件的1024字节到2048字节的内容。
import
os,urllib.request,re
os.chdir(r'd:')
data
=
urllib.request.urlopen(url).read()
with
open(filename,
'wb')
as
f:
f.write(data)
url就是你要下载的文件链接,filename就是下载后保存的文件名。这段代码是把文件下载在d盘根目录下,你可以自己修改。
不过是单线程的,想要多线程下载,比较复杂,我没有试过,这个下载小文件还是没有问题的。
拼装后作为参数:
cmd = 'RETR ' + name()
frp.retrbinary(cmd, file_handel, bufsize)