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的web框架中编写创建日志的程序的教程
Apr 30 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
解决python报错MemoryError的问题
Jun 26 Python
python try except 捕获所有异常的实例
Oct 18 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
python输入中文的实例方法
Sep 14 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中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详解微信小程序调用支付接口支付
2019/04/28 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python之re操作方法(详解)
2017/06/14 Python
有趣的python小程序分享
2017/12/05 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
汽车工程专业应届生求职信
2013/10/19 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python