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 相关文章推荐
深入理解Javascript中的this关键字
Mar 27 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
Python爬豆瓣电影实例
Feb 23 Python
Python检测网络延迟的代码
May 15 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
Python模块的加载讲解
Jan 15 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
使用python求解二次规划的问题
Feb 29 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
写好Python代码的几条重要技巧
May 21 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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
通过Email发送PHP错误的方法
2015/07/20 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PDO::setAttribute讲解
2019/01/29 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
javascript实现简易计算器的代码
2016/05/31 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
七年级地理教学反思
2014/01/26 职场文书
小学教师师德感言
2014/02/10 职场文书
投标担保书范文
2014/04/02 职场文书
北京奥运会口号
2014/06/21 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
教师学期末个人总结
2015/02/13 职场文书
酒店收银员岗位职责
2015/04/07 职场文书