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 正则式使用心得
May 07 Python
python 排列组合之itertools
Mar 20 Python
Python从MP3文件获取id3的方法
Jun 15 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
selenium处理元素定位点击无效问题
Jun 12 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
python xlwt模块的使用解析
Apr 13 Python
利用Python实现Picgo图床工具
Nov 23 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中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
Smarty保留变量用法分析
2016/05/23 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
MSN消息提示类
2006/09/05 Javascript
Ext面向对象开发实践(续)
2008/11/18 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
AngularJS语法详解
2015/01/23 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
基于vue配置axios的方法步骤
2017/11/09 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
pycharm远程调试openstack的图文教程
2017/11/21 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python中Numpy mat的使用详解
2019/05/24 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
保护校园环境倡议书
2015/04/28 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
APP界面设计技巧和注意事项
2022/04/29 杂记
vue实现在data里引入相对路径
2022/06/05 Vue.js