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函数式编程指南(二):从函数开始
Jun 24 Python
python 类详解及简单实例
Mar 24 Python
python机器学习库常用汇总
Nov 15 Python
详解js文件通过python访问数据库方法
Mar 03 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
python用700行代码实现http客户端
Jan 14 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
pytorch中[..., 0]的用法说明
May 20 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
php mysql索引问题
2008/06/07 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python 使用type来定义类的实现
2019/11/19 Python
wxPython实现绘图小例子
2019/11/19 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
反邪教标语
2014/06/23 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
卖车协议书范文
2016/03/23 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript