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 相关文章推荐
Python 文件操作实现代码
Oct 07 Python
python快速排序代码实例
Nov 21 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
python去除文件中重复的行实例
Jun 29 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
python os模块在系统管理中的应用
Jun 22 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 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
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
javascript数组详解
2014/10/22 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
单身旅行者的单身假期:Just You
2018/04/08 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
毕业生自荐信
2013/12/14 职场文书
质量承诺书范文
2014/03/27 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang