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 相关文章推荐
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Python之读取TXT文件的方法小结
Apr 27 Python
Python之列表的插入&替换修改方法
Jun 28 Python
Python中Proxypool库的安装与配置
Oct 19 Python
python 获取图片分辨率的方法
Jan 08 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
pandas的排序和排名的具体使用
Jul 31 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
Python之循环结构
2019/01/15 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
完美主义个人的自我评价
2014/02/17 职场文书
父母寄语大全
2014/04/12 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
改造DE1103三步曲
2022/04/07 无线电