Python实现批量下载文件


Posted in Python onMay 17, 2015

Python实现批量下载文件

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from gevent import monkey
monkey.patch_all()
from gevent.pool import Pool
import requests
import sys
import os

def download(url):
 chrome = 'Mozilla/5.0 (X11; Linux i86_64) AppleWebKit/537.36 ' + 
 '(KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
 headers = {'User-Agent': chrome}
 filename = url.split('/')[-1].strip()
 r = requests.get(url.strip(), headers=headers, stream=True)
 with open(filename, 'wb') as f:
 for chunk in r.iter_content(chunk_size=1024):
 if chunk:
f.write(chunk)
f.flush()
 print filename,"is ok"

def removeLine(key, filename):
 os.system('sed -i /%s/d %s' % (key, filename))

if __name__ =="__main__":
 if len(sys.argv) == 2:
 filename = sys.argv[1]
 f = open(filename,"r")
 p = Pool(4)
 for line in f.readlines():
 if line:
 p.spawn(download, line.strip())
 key = line.split('/')[-1].strip()
 removeLine(key, filename)
f.close()
p.join()
else:
 print 'Usage: python %s urls.txt' % sys.argv[0]

其他网友的方法:

from os.path import basename
from urlparse import urlsplit
def url2name(url):
  return basename(urlsplit(url)[2])

def download(url, localFileName = None):
  localName = url2name(url)
  req = urllib2.Request(url)
  r = urllib2.urlopen(req)
  if r.info().has_key('Content-Disposition'):
    # If the response has Content-Disposition, we take file name from it
    localName = r.info()['Content-Disposition'].split('filename=')[1]
    if localName[0] == '"' or localName[0] == "'":
      localName = localName[1:-1]
  elif r.url != url:
    # if we were redirected, the real file name we take from the final URL
    localName = url2name(r.url)
  if localFileName:
    # we can force to save the file as specified name
    localName = localFileName
  f = open(localName, 'wb')
  f.write(r.read())
  f.close()

download(r'你要下载的python文件的url地址')

以上便是本文给大家分享的全部内容了,小伙伴们可以测试下哪种方法效率更高呢。

Python 相关文章推荐
Python字符串逐字符或逐词反转方法
May 21 Python
Python编程中的文件操作攻略
Oct 16 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
python实现内存监控系统
Mar 07 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
python抓取最新博客内容并生成Rss
May 17 #Python
Python实现遍历数据库并获取key的值
May 17 #Python
Python对列表排序的方法实例分析
May 16 #Python
python中base64加密解密方法实例分析
May 16 #Python
python中threading超线程用法实例分析
May 16 #Python
python实现合并两个数组的方法
May 16 #Python
python简单实现基数排序算法
May 16 #Python
You might like
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
npm的lock机制解析
2019/06/20 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
Python 多线程Threading初学教程
2017/08/22 Python
tornado 多进程模式解析
2018/01/15 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python实现抖音点赞功能
2019/04/07 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
Python with标签使用方法解析
2020/01/17 Python
python数据分析:关键字提取方式
2020/02/24 Python
python中pow函数用法及功能说明
2020/12/04 Python
python爬取youtube视频的示例代码
2021/03/03 Python
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
安全员岗位职责
2013/11/11 职场文书
初中班主任评语大全
2014/04/24 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
话题作文之诚信
2019/11/28 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫