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连接mysql调用存储过程示例
Mar 05 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
对Python协程之异步同步的区别详解
Feb 19 Python
PyTorch中topk函数的用法详解
Jan 02 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python datetime模块使用方法小结
Jun 18 Python
python定义类的简单用法
Jul 24 Python
Python 解析xml文件的示例
Sep 29 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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修正代码
2011/05/09 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
PHP安全下载文件的方法
2016/04/07 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
js对象数组按属性快速排序
2011/01/31 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
Python做简单的字符串匹配详解
2017/03/21 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
初中同学会活动方案
2014/08/22 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
2015年教学工作总结
2015/04/02 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
行政撤诉申请书
2015/05/18 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript