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 运算符 供重载参考
Jun 11 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
Python编程之属性和方法实例详解
May 19 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python write无法写入文件的解决方法
Jan 23 Python
python的debug实用工具 pdb详解
Jul 12 Python
安装PyInstaller失败问题解决
Dec 14 Python
python圣诞树编写实例详解
Feb 13 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
python 实现体质指数BMI计算
May 26 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的闭合标签“?>”
2014/08/28 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
javascript时间差插件分享
2016/07/18 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
vue根据值给予不同class的实例
2018/09/29 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
Python切换pip安装源的方法详解
2016/11/18 Python
5款非常棒的Python工具
2018/01/05 Python
使用python生成目录树
2018/03/29 Python
python sys.argv[]用法实例详解
2018/05/25 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python如何进入交互模式
2020/07/06 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
美国最大网上鞋店:Zappos
2016/07/25 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
大学自主招生推荐信
2014/05/10 职场文书
城管年度个人总结
2015/02/28 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers