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输出当前目录下index.html文件路径的方法
Apr 28 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
Python中常用的内置方法
Jan 28 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
python类中super() 的使用解析
Dec 19 Python
详解python中各种文件打开模式
Jan 19 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 Python
Python如何让字典保持有序排列
Apr 29 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php发送post请求函数分享
2014/03/06 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
本地存储localStorage用法详解
2017/07/31 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python黑魔法之参数传递
2016/02/12 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
python关于变量名的基础知识点
2020/03/03 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
文员个人的求职信范文
2013/09/26 职场文书
中学生自我评价范文
2014/02/08 职场文书
小学新学期寄语
2014/04/02 职场文书
新员工考核评语
2014/12/31 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Django REST framework 限流功能的使用
2021/06/24 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers