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之编写简单乘法口诀表实现代码
Feb 27 Python
python 自定义装饰器实例详解
Jul 20 Python
Django 拆分model和view的实现方法
Aug 16 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
python输入中文的实例方法
Sep 14 Python
Python通过Schema实现数据验证方式
Nov 12 Python
Python 制作自动化翻译工具
Apr 25 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
如何在PHP中进行身份认证
2006/10/09 PHP
在普通HTTP上安全地传输密码
2007/07/21 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python中删除某个元素的方法解析
2019/11/05 Python
零基础小白多久能学会python
2020/06/22 Python
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
软件测试题目
2013/02/27 面试题
市场部管理制度
2014/02/02 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
北京奥运会口号
2014/06/21 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
教师党员自我评价2015
2015/03/04 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书