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使用webbrowser浏览指定url的方法
Apr 04 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
Django 连接sql server数据库的方法
Jun 30 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python 生成VOC格式的标签实例
Mar 10 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
Flask处理Web表单的实现方法
Jan 31 Python
python 装饰器重要在哪
Feb 14 Python
Python编解码问题及文本文件处理方法详解
Jun 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php flush类输出缓冲剖析
2008/10/19 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
BootStrap中
2016/12/10 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python创建文件备份的脚本
2018/09/11 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
校园之星获奖感言
2014/01/29 职场文书
兴趣小组活动总结
2014/05/05 职场文书
团日活动总结模板
2014/06/25 职场文书
民族学专业求职信
2014/07/28 职场文书
党校党性分析材料
2014/12/19 职场文书
预备党员考察意见范文
2015/06/01 职场文书
党员身份证明材料
2015/06/19 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
英镑符号 £
2022/02/17 杂记