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中的文档测试模块
Apr 28 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python变量命名的7条建议
Jul 04 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
深入了解Python 变量作用域
Jul 24 Python
超级实用的8个Python列表技巧
Aug 24 Python
python自动化八大定位元素讲解
Jul 09 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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/01/07 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
javascript轮播图算法
2016/10/21 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
在Python中使用模块的教程
2015/04/27 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
python生成圆形图片的方法
2020/03/25 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
先进个人事迹材料
2014/01/25 职场文书
高级销售求职信
2014/02/21 职场文书
装修协议书范本
2014/04/21 职场文书
华山导游词
2015/02/03 职场文书
员工开除通知书
2015/04/25 职场文书
导游词之桂林
2019/08/20 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server