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科学计算环境推荐——Anaconda
Jun 30 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
Django如何实现上传图片功能
Aug 16 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
python识别验证码图片实例详解
Feb 17 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python suds访问webservice服务实现
Jun 26 Python
Python中bisect的用法及示例详解
Jul 20 Python
Python如何实现线程间通信
Jul 30 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显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP实现简易blog的制作
2016/10/24 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
javascript中创建对象的几种方法总结
2013/11/01 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
优秀毕业生自我鉴定
2014/01/19 职场文书
铁路工务反思材料
2014/02/07 职场文书
安全检查汇报材料
2014/12/26 职场文书
三方协议书
2015/01/27 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
python 对图片进行简单的处理
2021/06/23 Python