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 05 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python中csv文件的若干读写方法小结
Jul 04 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
自定义django admin model表单提交的例子
Aug 23 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
基于Python fminunc 的替代方法
Feb 29 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
数控专业个人求职信范例
2013/11/29 职场文书
客户经理岗位职责
2013/12/08 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL