python中图片下载器的实现
上一篇 / 下一篇 2015-01-20 12:53:03 / 个人分类:python
1.
图片下载器的例子解说
(1)
图片下载,需要哪些步骤:
1.
下载图片的url
2.
图片下载后保存在哪
3.
怎么知道图片下载完成了-下载进度显示
4.
下载图片
(2)
图片的url,可以在函数中指定url,这样不灵活,每次修改url还要去函数中修改,所以直接从命令行输入,比较灵活。
1.
从命令行输入url的函数。
这个函数中只有一种有效,就是正确的url,其他的情况都会输出不合法的输入。
这个函数没有用try except捕获异常,所以运行时还是会提示错误,在判断url是否合法方面,可以用正则表达式来判断。
#输入url
def getUrl():
while True:
url =
raw_input("please input your url:")#输入url
if url !=r'http://www.baidu.com/img/bdlogo.png':
#url不合法的情况下退出
print "不合法的输入!"
break
return url
2.
从命令行输入保存目录的函数
输入保存目录,要考虑目录存在与否的处理,在此函数中,用exists函数判断目录是否存在
#输入保存目录
def getDest():
dir_path =
raw_input("please input your destation to
store:")#输入保存目录
if not (os.path.exists(dir_path)):#如果目录不存在
return r"d:\\"
return dir_path
3.
从url获取网页内容的函数
用urllib2模块下的urlopen函数获取网页内容
#打开网页获取内容
def getDF(url):
df =
urllib2.urlopen(url)
return
df
4.
从网页内容中获取文件尺寸
Urlopen获取了网页文件中的所有信息。
#获取尺寸
def getSize(df):
file_size =
int(df.info().getheaders("Content-Length")[0])
if(file_size >1024*1024 ):
print "空间不足"
return file_size
5.
获取文件名
获取文件名作为保存在指定目录下的名字
#获取名字,返回url中最后一个/的名字
def getName(url,df):
try:
file_name=(str(df.info().getheaders("Content-Disposition")[0])).split('"')[1] #分离出文件名,若文件名不存在或者出错,调用except中的函数
except IndexError ,e :
file_name=str(url.split('/')[-1]) #分离出url中的最后一个/后面的内容,转化为字符串赋予给文件名
return file_name
6.
下载图片
def downloadFiles(full_path,df):
file_size_dl=0 #初始化
block_sz=8192*50
f=open(full_path,'wb') #打开文件
while True:
buffer =
df.read(block_sz) #每次读取block_sz大小的网页中的内容到buffer
if not buffer:#若buffer为空,没有读取到内容,则退出while循环
break
file_size_dl += len(buffer) #文件大小为多次缓存区的大小之和
f.write(buffer)
#buffer内容写入到文件
status = r"%10d [%3.2f%%]"
%(file_size_dl,file_size_dl*100.0/file_size) #显示下载进度
status =
status+chr(8)*(len(status)+1) #打印空格
print status,
f.close() #关闭文件
print "Got files
dist file data %s" % file_size_dl
(3)完整程序如下:
#-*-coding:utf-8-*-
import
os
import
sys
import
urllib2
#输入url
def
getUrl():
while True:
url = raw_input("please input your url:")
if url == None or url != r'http://www.baidu.com/img/bdlogo.png':#url为空的情况下退出
print "不合法的输入!"
break
return url
#输入保存目录
def
getDest():
dir_path = raw_input("please input
your destation to store:")
if not (os.path.exists(dir_path)):#如果目录不存在
return r"d:\\"
return
dir_path
#打开网页获取内容
def
getDF(url):
df = urllib2.urlopen(url)
return
df
#获取尺寸
def
getSize(df):
file_size = int(df.info().getheaders("Content-Length")[0])
if(file_size >1024*1024 ):
print "空间不足"
return
file_size
#获取名字,返回url中最后一个/的名字
def
getName(url,df):
try:
TAG: