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编程中对文件和存储器的读写示例
Jan 25 Python
Python批量修改文本文件内容的方法
Apr 29 Python
Python多层装饰器用法实例分析
Feb 09 Python
python opencv之SURF算法示例
Feb 24 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
浅谈Python基础—判断和循环
Mar 22 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 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 使用curl提交json格式数据
2013/06/29 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
围观tangram js库
2010/12/28 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python binascii 进制转换实例
2019/06/12 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Django 路由层URLconf的实现
2019/12/30 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
专家推荐信怎么写
2015/03/25 职场文书
大学推普周活动总结
2015/05/07 职场文书
超市主管竞聘书
2015/09/15 职场文书
2016大学军训心得体会
2016/01/11 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书