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实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
python中zip()方法应用实例分析
Apr 16 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
python中dict使用方法详解
Jul 17 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
简单了解python数组的基本操作
Nov 26 Python
jupyter notebook清除输出方式
Apr 10 Python
python批量修改交换机密码的示例
Sep 22 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 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版本号
2006/10/09 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
PHP使用数组实现队列
2012/02/05 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
python base64库给用户名或密码加密的流程
2020/01/02 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
python实时监控logstash日志代码
2020/04/27 Python
Python正则表达式如何匹配中文
2020/05/27 Python
Django REST 异常处理详解
2020/07/15 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
值传递还是引用传递
2015/02/08 面试题
师范生实习自我鉴定
2013/11/01 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
精彩广告词大全
2014/03/19 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js