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 16 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Django中的Signal代码详解
Feb 05 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python实现彩色图转换成灰度图
Jan 15 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
python selenium 获取接口数据的实现
Dec 07 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
python中最小二乘法详细讲解
Feb 19 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
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
python中for in的用法详解
2020/04/17 Python
python中线程和进程有何区别
2020/06/17 Python
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
Java servlet面试题
2012/03/04 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
女娲补天教学反思
2014/02/05 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
Redis keys命令的具体使用
2022/06/05 Redis
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers