Python实现的批量下载RFC文档


Posted in Python onMarch 10, 2015

RFC文档有很多,有时候在没有联网的情况下也想翻阅,只能下载一份留存本地了。
看了看地址列表,大概是这个范围:
http://www.networksorcery.com/enp/rfc/rfc1000.txt
...
http://www.networksorcery.com/enp/rfc/rfc6409.txt

哈哈,很适合批量下载,第一个想到的就是迅雷……
可用的时候发现它只支持三位数的扩展(用的是迅雷7),我想要下的刚好是四位数……
郁闷之下萌生自己做一个的想法!
这东西很适合用python做,原理很简单,代码也很少,先读为快。
代码如下:

#! /usr/bin/python

'''

  File      : getRFC.py

  Author    : Mike

  E-Mail    : Mike_Zhang@live.com

'''

import urllib,os,shutil,time
def downloadHtmlPage(url,tmpf = ''):

    i = url.rfind('/')

    fileName = url[i+1:]

    if tmpf : fileName = tmpf

    print url,"->",fileName

    urllib.urlretrieve(url,fileName)

    print 'Downloaded ',fileName    

    time.sleep(0.2)

    return fileName

    

# http://www.networksorcery.com/enp/rfc/rfc1000.txt

# http://www.networksorcery.com/enp/rfc/rfc6409.txt

if __name__ == '__main__':

    addr = 'http://www.networksorcery.com/enp/rfc'    

    dirPath = "RFC"

    #startIndex = 1000

    startIndex = int(raw_input('start : '))

    #endIndex = 6409

    endIndex = int(raw_input('end : '))

    if startIndex > endIndex : 

        print 'Input error!'        

    if False == os.path.exists(dirPath):

        os.makedirs(dirPath)    

    fileDownloadList = []

    logFile = open("log.txt","w")

    for i in range(startIndex,endIndex+1):

        try:            

            t_url = '%s/rfc%d.txt' % (addr,i)

            fileName = downloadHtmlPage(t_url)

            oldName = './'+fileName

            newName = './'+dirPath+'/'+fileName

            if True == os.path.exists(oldName):

                shutil.move(oldName,newName)

                print 'Moved ',oldName,' to ',newName

        except:

            msgLog = 'get %s failed!' % (i)

            print msgLog

            logFile.write(msgLog+'\n')

            continue

    logFile.close()

除了RFC文档,这个程序稍加修改也可以做其它事情:比如批量下载MP3、电子书等等。

好,就这些了,希望对你有帮助。

Python 相关文章推荐
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
python 获取网页编码方式实现代码
Mar 11 Python
Python入门_浅谈for循环、while循环
May 16 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
python看某个模块的版本方法
Oct 16 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
Python正则表达式和re库知识点总结
Feb 11 Python
python opencv摄像头的简单应用
Jun 06 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
Python制作CSDN免积分下载器
Mar 10 #Python
Python Tkinter GUI编程入门介绍
Mar 10 #Python
Python格式化css文件的方法
Mar 10 #Python
Python将xml和xsl转换为html的方法
Mar 10 #Python
Python写的Tkinter程序屏幕居中方法
Mar 10 #Python
Python生成随机密码
Mar 10 #Python
Python获取单个程序CPU使用情况趋势图
Mar 10 #Python
You might like
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
用ADODB.Stream转换
2007/01/22 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
js密码强度检测
2016/01/07 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python使用xpath实现图片爬取
2020/09/16 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
文科生自我鉴定
2014/02/15 职场文书
风险评估实施方案
2014/03/09 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android