python download url 函数详解
2016-10-11 09:27
537 查看
函数代码如下:
import os, urllib,request, threading, posixpath, urllib.parse, atexit, random
pool_sema = threading.BoundedSemaphore(value=6) #max number of download threads #设置多线程的线程数
socket.setdefaulttimeout(5000) #设置超时
in_progress = [] #定义一个空list供存储进行的download任务
def download(url):
pool_sema.acquire() #开启线程池
path = urllib.parse.urlsplit(url).path #解析url,去掉http://....(即第一个'/'前面的内容) 如http://www.baidu.com/tf/boys.jpg的结果为'/tf/boys.jpg'
filename = posixpath.basename(path) #取path字符串最后一个'/'后面的字符串作为名称 如'/tf/boys.jpg'的结果为'boys.jpg'
while os.path.exists(outputpath + '/' + filename):
filename = str(random.randint(0, 100)) + filename #如果检查到目标文件夹中已经有此下载内容,则对要下载的文件重命名,前面加上0-100间的随机数
in_progress.appen(filename) #将要下载的任务加入list
try:
urllib.request.urlretrieve(url, output_path + '/' + filename) #下载url对应的文件
in_progress.remove(filename) #下载成功从list中划掉此任务
except:
print("----------------- Download failed: " + filename) #提示用户此文件下载失败
pool_sema.release() #释放线程池
def removeNotFinished(): #此函数用于程序关闭时的回调函数
for filename in in_progress:
try:
os.remove(output_path + '/' + filename) #删除没有完成的任务
except FileNotFoundError:
pass
关于程序关闭时的回调函数:atexit.register(removeNotFinished)
定义了一个register函数用于注册程序退出时的回调函数,可以在这个回调函数中做一些资源清理的操作。如果程序是非正常的crash或者通过os._exit()退出,注册的回调函数将不会被调用。
import os, urllib,request, threading, posixpath, urllib.parse, atexit, random
pool_sema = threading.BoundedSemaphore(value=6) #max number of download threads #设置多线程的线程数
socket.setdefaulttimeout(5000) #设置超时
in_progress = [] #定义一个空list供存储进行的download任务
def download(url):
pool_sema.acquire() #开启线程池
path = urllib.parse.urlsplit(url).path #解析url,去掉http://....(即第一个'/'前面的内容) 如http://www.baidu.com/tf/boys.jpg的结果为'/tf/boys.jpg'
filename = posixpath.basename(path) #取path字符串最后一个'/'后面的字符串作为名称 如'/tf/boys.jpg'的结果为'boys.jpg'
while os.path.exists(outputpath + '/' + filename):
filename = str(random.randint(0, 100)) + filename #如果检查到目标文件夹中已经有此下载内容,则对要下载的文件重命名,前面加上0-100间的随机数
in_progress.appen(filename) #将要下载的任务加入list
try:
urllib.request.urlretrieve(url, output_path + '/' + filename) #下载url对应的文件
in_progress.remove(filename) #下载成功从list中划掉此任务
except:
print("----------------- Download failed: " + filename) #提示用户此文件下载失败
pool_sema.release() #释放线程池
def removeNotFinished(): #此函数用于程序关闭时的回调函数
for filename in in_progress:
try:
os.remove(output_path + '/' + filename) #删除没有完成的任务
except FileNotFoundError:
pass
关于程序关闭时的回调函数:atexit.register(removeNotFinished)
定义了一个register函数用于注册程序退出时的回调函数,可以在这个回调函数中做一些资源清理的操作。如果程序是非正常的crash或者通过os._exit()退出,注册的回调函数将不会被调用。
相关文章推荐
- python download url 函数详解
- 在ActiveX中使用URLDownLoadToFile函数中的参数问题
- PHP URL函数详解
- Python urllib模块urlopen()与urlretrieve()详解
- Python - 函数(function) 的 代码 及 详解
- Python - 函数(function) 的 代码 及 详解
- [分享]C标准库及TC函数详解graphics.h http://bbs.yesky.com/bbs.php?url=http://bbs.yesky.com/viewthread.php?tid=2090892&pid=2131523
- Python help()函数用法详解
- Python学习入门基础教程(learning Python)--2.3.2Python函数实参详解
- Python中的getattr()函数详解
- Python中的getattr()函数详解
- Python中的getattr()函数详解
- python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例
- python 函数详解 二
- Python开发技术详解-笔记_第05章-模块与函数
- python 内建函数详解及相关示例
- python 函数详解 一
- python 函数 详解(一)
- Python中的getattr()函数详解
- Python自定义函数的创建、调用和函数的参数详解