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编程中JSON模块的使用
Oct 15 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
彻底弄懂Python中的回调函数(callback)
Jun 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
无线电的诞生过程
2021/03/01 无线电
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Python 加密的实例详解
2017/10/09 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
python Django的web开发实例(入门)
2019/07/31 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
Python turtle库的画笔控制说明
2020/06/28 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
super关键字的用法
2012/04/10 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
争做文明公民倡议书
2014/08/29 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
采购员岗位职责范本
2015/04/07 职场文书
休假证明书
2015/06/24 职场文书
小学英语教学反思范文
2016/02/15 职场文书