Python多线程下载文件的方法


Posted in Python onJuly 10, 2015

本文实例讲述了Python多线程下载文件的方法。分享给大家供大家参考。具体实现方法如下:

import httplib
import urllib2
import time
from threading import Thread
from Queue import Queue
from time import sleep
proxy = 'your proxy';
opener = urllib2.build_opener( urllib2.ProxyHandler({'http':proxy}) )
urllib2.install_opener( opener )
ids = {};
for i in range(1,110):
 try:
  listUrl = "http://www.someweb.net/sort/list_8_%d.shtml" % (i);
  print listUrl;
  page = urllib2.urlopen(listUrl).read();
  speUrl = "http://www.someweb.net/soft/";
  speUrlLen = len(speUrl);
  idx = page.find(speUrl,0);
  while idx!=-1:
   dotIdx = page.find(".",idx + speUrlLen);
   if dotIdx != -1:
    id = page[idx + speUrlLen:dotIdx];
    ids[id] = 1;
   idx = page.find("http://www.someweb.net/soft/",idx + speUrlLen);
 except:
  pass;
q = Queue()
NUM = 5
failedId = [];
def do_somthing_using(id):
 try:
  url = "http://www.someweb.net/download.php?softid=%s&type=dx" % (id);
  h2 = httplib.HTTPConnection("your proxy", "you port");
  h2.request("HEAD", url);
  resp = h2.getresponse();
  header = resp.getheaders();
  location = header[3][1];  
  sContent = urllib2.urlopen(location).read();
  savePath = "C:\\someweb\\%s.rar" % (id);
  file=open(savePath,'wb');
  file.write(sContent);
  file.close(); 
  print savePath + " saved";
 except:
  pass;
def working():
 while True:
  arguments = q.get()
  do_somthing_using(arguments)
  sleep(1)
  q.task_done()
for i in range(NUM):
 t = Thread(target=working)
 t.setDaemon(True)
 t.start()
for id in ids:
 q.put(id)
q.join()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python赋值操作方法分享
Mar 23 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
基于python神经卷积网络的人脸识别
May 24 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
使用numba对Python运算加速的方法
Oct 15 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
Python函数参数定义及传递方式解析
Jun 10 Python
python判断是空的实例分享
Jul 06 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
Python爬取国外天气预报网站的方法
Jul 10 #Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 #Python
python简单文本处理的方法
Jul 10 #Python
Python实现把json格式转换成文本或sql文件
Jul 10 #Python
Python中的一些陷阱与技巧小结
Jul 10 #Python
Python中的fileinput模块的简单实用示例
Jul 09 #Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 #Python
You might like
php木马攻击防御之道
2008/03/24 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
php中文验证码实现示例分享
2014/01/12 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js中this的用法实例分析
2015/01/10 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python中如何使用虚拟环境
2020/10/14 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
节约粮食标语
2014/06/18 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
实习生辞职信范文
2015/03/02 职场文书
拖欠货款起诉状
2015/05/20 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
vue如何清除浏览器历史栈
2022/05/25 Vue.js