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实现测试磁盘性能的方法
Mar 12 Python
Python中特殊函数集锦
Jul 27 Python
Python 常用string函数详解
May 30 Python
Python如何实现文本转语音
Aug 08 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 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
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python MD5加密的示例
2020/10/19 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
应届生护士求职信
2013/11/01 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
表彰会主持词
2014/03/26 职场文书
分公司负责人任命书
2014/06/04 职场文书
质量标语大全
2014/06/12 职场文书
公司授权委托书范本
2014/09/18 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js