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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
python获得一个月有多少天的方法
Jun 04 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
Python类的动态修改的实例方法
Mar 24 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python3的print()函数的用法图文讲解
Jul 16 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
潜说js对象和数组
2011/05/25 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Python中使用item()方法遍历字典的例子
2014/08/26 Python
浅谈Python中数据解析
2015/05/05 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
银行求职信个人范文
2013/12/16 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
人大代表选举标语
2014/10/07 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
考博导师推荐信范文
2015/03/27 职场文书
银行催款通知书
2015/04/17 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
酒店厨房管理制度
2015/08/06 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Python列表的索引与切片
2022/04/07 Python