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 ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
使用Python脚本生成随机IP的简单方法
Jul 30 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
Python中装饰器高级用法详解
Dec 25 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
python实现的自动发送消息功能详解
Aug 15 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python matplotlib实时画图案例
Apr 23 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
5个pandas调用函数的方法让数据处理更加灵活自如
Apr 24 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
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP xpath()函数讲解
2019/02/11 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
jquery密码强度校验
2015/12/02 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
JS实现小米轮播图
2020/09/21 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
python重试装饰器示例
2014/02/11 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
医科大学生毕业的自我评价分享
2013/11/12 职场文书
机械电子工程专业推荐信范文
2013/11/20 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
2014年三万活动总结
2014/04/26 职场文书
高中生学习计划书
2014/09/15 职场文书
浅析Python实现DFA算法
2021/06/26 Python
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js