Python urllib模块urlopen()与urlretrieve()详解


Posted in Python onNovember 01, 2013

1.urlopen()方法
urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。
参数url表示远程数据的路径,一般是网址;
参数data表示以post方式提交到url的数据(玩过web的人应该知道提交数据的两种方式:post与get。如果你不清楚,也不必太在意,一般情况下很少用到这个参数);
参数proxies用于设置代理。
urlopen返回 一个类文件对象,它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息
getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
geturl():返回请求的url;
代码示例:

import urllib
url = "http://www.baidu.com/"
#urlopen()
sock = urllib.urlopen(url)
htmlCode = sock.read()
sock.close
fp = open("e:/1.html","wb")
fp.write(htmlCode)
fp.close
#urlretrieve()
urllib.urlretrieve(url, 'e:/2.html')

2.urlretrieve方法
直接将远程数据下载到本地。

urllib.urlretrieve(url[, filename[, reporthook[, data]]])
参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

下面通过例子来演示一下这个方法的使用,这个例子将新浪首页的html抓取到本地,保存在D:/sina.html文件中,同时显示下载的进度。
import urllib
def callbackfunc(blocknum, blocksize, totalsize):
    '''回调函数
    @blocknum: 已经下载的数据块
    @blocksize: 数据块的大小
    @totalsize: 远程文件的大小
    '''
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print "%.2f%%"% percent
url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)

Python 相关文章推荐
python 中文乱码问题深入分析
Mar 13 Python
python list元素为tuple时的排序方法
Apr 18 Python
详解Django的CSRF认证实现
Oct 09 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python已协程方式处理任务实现过程
Dec 27 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
详细分析Python垃圾回收机制
Jul 01 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
Python ZipFile模块详解
Nov 01 #Python
python标准日志模块logging的使用方法
Nov 01 #Python
python类定义的讲解
Nov 01 #Python
用实例说明python的*args和**kwargs用法
Nov 01 #Python
python操作MongoDB基础知识
Nov 01 #Python
python操作MySQL数据库具体方法
Oct 28 #Python
Python sys.path详细介绍
Oct 17 #Python
You might like
PHP自定义错误用法示例
2016/09/28 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
原生js实现日期联动
2015/01/12 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
纯javascript版日历控件
2016/11/24 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
python爬虫爬取某站上海租房图片
2018/02/04 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
python 读取.nii格式图像实例
2020/07/01 Python
Python-openCV开运算实例
2020/07/05 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
保险专业自荐信范文
2014/02/20 职场文书
公证委托书标准格式
2014/09/11 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
企业计划生育责任书
2015/05/09 职场文书
硕士论文致谢范文
2015/05/14 职场文书
经典爱情感言
2015/08/03 职场文书
如何用python反转图片,视频
2021/04/24 Python