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自动格式化json文件的方法
Mar 11 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
Django中url的反向查询的方法
Mar 14 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
python实现微信自动回复机器人功能
Jul 11 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
python函数指定默认值的实例讲解
Mar 29 Python
Python包argparse模块常用方法
Jun 04 Python
分享7个 Python 实战项目练习
Mar 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
社区(php&&mysql)一
2006/10/09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
php判断目录存在的简单方法
2019/09/26 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python虚拟环境迁移方法
2019/01/03 Python
pandas删除指定行详解
2019/04/04 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
大整数数相乘的问题
2012/07/22 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
农民工创业典型事迹
2014/01/25 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
财务稽核岗位职责
2015/04/13 职场文书
办公用品管理制度
2015/08/04 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
css样式important规则的正确使用方式
2022/06/10 HTML / CSS