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写的一个定时重跑获取数据库数据
Dec 28 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
python3.5绘制随机漫步图
Aug 27 Python
详解Python3 pickle模块用法
Sep 16 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
基于Tensorflow一维卷积用法详解
May 22 Python
python如何进行基准测试
Apr 26 Python
python 如何在list中找Topk的数值和索引
May 20 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
Python Django / Flask如何使用Elasticsearch
Apr 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
一个SQL管理员的web接口
2006/10/09 PHP
如何开发一个虚拟域名系统
2006/10/09 PHP
一个捕获函数输出的函数
2007/02/14 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python可变参数函数用法实例
2015/07/07 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
Django的性能优化实现解析
2019/07/30 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
店长岗位的工作内容
2013/11/12 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
员工工作表现评语
2014/04/26 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
贷款工作证明模板
2015/06/12 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
解除租赁合同协议书
2016/03/21 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS