- 浏览: 242742 次
- 性别:
- 来自: 山西
文章分类
最新评论
-
jy00509336:
wgrmmtmr 写道let g:miniBufExplMap ...
用Gvim建立IDE编程环境 (Windows篇) -
wgrmmtmr:
let g:miniBufExplMapWindowsNavV ...
用Gvim建立IDE编程环境 (Windows篇) -
jy00509336:
avi9111 写道还是同样问题,你这个代码ctrl+c和ct ...
JTextField只允许输入数字和字母 -
avi9111:
还是同样问题,
你这个代码
ctrl+c和ctrl+v粘贴 ...
JTextField只允许输入数字和字母 -
jy00509336:
ILoveDOUZHOU 写道windows下为什么使用vim ...
用Gvim建立IDE编程环境 (Windows篇)
转载自:http://hi.baidu.com/woshihuanquan/blog/item/5b38e60ea0b090cc7bcbe101.html
一。该模块的用途:
1。从制定的URL获取数据
2。对URL字符串进行格式化处理
二。__version__='1.17'的urllib模块中的主要函数和类介绍:
1。函数:
(1)def urlopen(url, data=None, proxies=None)
参数说明:
url 符合URL规范的字符串(包括http,ftp,gopher,local-file标准)
data 向指定的URL发送的数据字符串,GET和POST都可,但必须符合标准格式
格式为key=value&key1=value1....
proxies 代理服务器地址字典,如果未指定,在WINDOWS平台上则依据IE的设置
不支持需要验证的代理服务器
例如:proxies = {'http': 'http://www.someproxy.com:3128'}
该例子表示一个http代理服务器http://www.someproxy.com:3128
函数实现说明:
该函数使用类FancyURLopener从URLopener继承来的open方法执行具体的操作。
返回值:
返回一个类似文件对象的对象(file_like) object
该对象拥有的方法为
read()
readline()
readlines()
fileno()
close()
以上方法同file object的类似方法的使用方法基本一致
info()返回从服务器传回的MIME标签头
geturl()返回真实的URL,之所以称为真实,是因为对于某些重定向的URL,将返回被重定后的。
(2)def urlretrieve(url, filename=None, reporthook=None, data=None):
参数说明:
url 符合URL规范的字符串
filename 本地文件路径的字符串,从URL返回的数据将保存在该文件中,如果设置为None
则生成一个临时文件
reporthook 一个函数引用,自己可以任意定义该函数的行为,只需要保证函数有三个参数
urlretrieve为这个函数传递的三个参数的含义为:
第一个参数为目前为止传递的数据块数量
第二个参数为每个数据块的大小,单位为byte
第三个参数文件总的大小(某些时候可能为-1)
data 向指定的URL发送的数据字符串,GET和POST都可,但必须符合标准格式
格式为key=value&key1=value1....
函数实现说明:
该函数使用类FancyURLopener从URLopener继承来的retrieve方法执行具体的操作。
返回值:
返回一个元组 (filename, headers)
filename为参数中的 filename
headers 为从服务器传回的MIME标签头
(3)def urlcleanup():
参数说明: 无参数
函数实现说明:该函数使用类FancyURLopener从URLopener继承来的cleanup方法执行具体的操作。
清除使用urlopen或urlretrieve后产生的缓存文件
返回值: 无返回值
(4)def quote(s, safe = '/'):
参数说明:
s 需要转化的字符串
safe 需要保留不转化的字符序列
函数实现说明:
根据rfc 2396规定,URL保留字符为
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |"$" | ","
但是这些字符并不是在所有类型的URL中都保留不转化,
所以要求使用该函数的时候在转化不同的URL时设置不同的保留字符
其中在任意部分都不转化的字符为:大小写字母,数字,'_','.','-'
对于汉字,也可以使用,但要加上相应的编码,比如quote(u'蟒蛇'.encode('gb2312'))
该函数会将所有非保留的字符转化成%xx这样的形式,其中xx为两位的十六进制数
返回值:
转化后的字符串
(5)def quote_plus(s, safe = ''):
参数说明:
s 需要转化的字符串
safe 需要保留不转化的字符序列
函数实现说明:
与quote函数基本一致,只是把参数s中的空格转化成'+',而不是%20
返回值:
转化后的字符串
(6)def unquote(s):
参数说明:
s 需要反向转化的字符串
函数实现说明:
与quote作用相反的解析函数
返回值:
转化后的字符串
(7)def unquote_plus(s):
s 需要反向转化的字符串
函数实现说明:
与quote_plus作用相反的解析函数
返回值:
转化后的字符串
(8)def urlencode(query,doseq=0):
参数说明:
query 可以是一个由二元元组做元素的元组,也可以是一个字典
doseq 如何对参数字符串化
函数实现说明:
将成对的数据按照URL中的要求组成一个参数字符串
例如:
query = (('name','cs'),('age','1'),('height','2'))
re = urllib.urlencode(query)
print re
query1 = {'name':'cs','age':'1','height':'2'}
print urllib.urlencode(query1)
这两个的效果基本一样,但字典类型会自动排序,
输出结果为:
name=cs&age=1&height=2
age=1&name=cs&height=2
doseq参数的意义,文档太简短,尝试了一下,发现在如何字符串化上不同
query1 = {'name':'cs','age':('a','b'),'height':'1'}
print urllib.urlencode(query1,1)
print urllib.urlencode(query1,0)
输出结果为:
age=a&age=b&name=cs&height=1
age=%28%27a%27%2C+%27b%27%29&name=cs&height=1
返回值:
经过拚接的参数字符串
(9)def url2pathname(pathname):
参数说明:
pathname URL字符串
函数实现说明:
该函数将根据操作系统确定如何转化URL中的'/'为'\' ,
然后其他的就和quote行为一样了(就是将字符串传递给quote来处理的)
返回值:
符合本地文件路径格式的字符串
(10)def pathname2url(pathname):
参数说明:
pathname 符合本地文件路径命名的格式的字符串
函数实现说明:
该函数将根据操作系统确定如何转化URL中的'/'为'\' ,
然后其他的就和unquote行为一样了(就是将字符串传递给unquote来处理的)
返回值:
符合URL标准的字符串
(注:9,10这两个函数一般不直接用,而是在提供的以统一的方法定位网络和本地资源的接口函数中使用)
(11)def splittag(url):
(12)def localhost():
(13)def thishost():
(14)def ftperrors():
(15)def unwrap(url):
(16)def splittype(url):
(17)def splithost(url):
(18)def splituser(host):
(19)def splitpasswd(user):
(20)def splitport(host):
(21)def splitnport(host, defport=-1):
(22)def splitquery(url):
(23)def splitattr(url):
(24)def splitvalue(attr):
(25)def splitgophertype(selector):
(26)def getproxies_environment():
(11)---(26)这些函数都是作为工具函数来使用的,主要用来对URL中的数据进行分割,如果需要添加新的协议,需要对这些函数做修改,其他的时候不会直接使用。
2。类:
(1)class URLopener:
类说明:
该类只是一个基础类,提供了基本的和服务器打交道的方法,缺乏具体的错误处理方法,
如果需要类对具体的错误具有相应的处理功能,可以从该类继承,
然后在子类里添加相应的错误处理方法.
该类的方法:
def __init__(self, proxies=None, **x509):
def close(self):
close只是调用了cleanup方法
def cleanup(self):
如果在子类中覆写了该方法,需要注意,不能在该方法中
使用任何全局对象,或者从其他模块引入的对象
因为该方法不能保证在其他的对象销毁后不被调用
def addheader(self, *args):
添加MIME标签头的内容
def open(self, fullurl, data=None):
与urlopen函数的功能基本一样
def open_unknown(self, fullurl, data=None):
def open_unknown_proxy(self, proxy, fullurl, data=None):
在open方法里,如果传入的url(可能是代理服务器)不能被自动识别出来,
则把相应的url传入open_unknown或open_unknown_proxy
然后引发一个异常
def retrieve(self, url, filename=None, reporthook=None, data=None):
与urlretrieve函数的基本功能一样
def http_error(self, url, fp, errcode, errmsg, headers, data=None):
def http_error_default(self, url, fp, errcode, errmsg, headers):
错误处理方法将去寻找形如http_error_‘errorcode’的错误处理方法
添加错误处理方法:应该在该该类的子类中添加这种形式的错误处理方法
可以参考类FancyURLopener中的错误处理方法
def open_http(self, url, data=None):
def open_gopher(self, url):
def open_file(self, url):
def open_local_file(self, url):
def open_ftp(self, url):
def open_data(self, url, data=None):
在open方法里,根据不同的url将使用上边这些方法打开
如果要加入新的协议,需要在子类中添加一个open_XXX的方法
然后修改splittype,splithost等工具函数,添加相关的信息
(2)class FancyURLopener(URLopener):
类说明:
为HTTP协议增加了错误处理方法,如果需要增加自己的错误处理方法
只需要添加形如http_error_%d的方法,%d应该为错误号
编写自己的URL处理类可以参考该类
该类的方法:
这些错误处理方法,会被URLopener类的错误处理函数自动搜索到
def __init__(self, *args, **kwargs):
def http_error_default(self, url, fp, errcode, errmsg, headers):
def http_error_302(self, url, fp, errcode, errmsg, headers, data=None):
def redirect_internal(self, url, fp, errcode, errmsg, headers, data):
http协议返回的是302错误,然后确定不是500错误后,使用方法redirect_internal
def http_error_301(self, url, fp, errcode, errmsg, headers, data=None):
def http_error_303(self, url, fp, errcode, errmsg, headers, data=None):
def http_error_307(self, url, fp, errcode, errmsg, headers, data=None):
def http_error_401(self, url, fp, errcode, errmsg, headers, data=None):
def http_error_407(self, url, fp, errcode, errmsg, headers, data=None):
def retry_proxy_http_basic_auth(self, url, realm, data=None):
def retry_proxy_https_basic_auth(self, url, realm, data=None):
def retry_http_basic_auth(self, url, realm, data=None):
def retry_https_basic_auth(self, url, realm, data=None):
def get_user_passwd(self, host, realm, clear_cache = 0):
def prompt_user_passwd(self, host, realm):
当访问需要被授权时,该类将使用该方法,让用户输入认证信息
从该类继承的子类,可以覆写该方法,以实现更多的控制功能
以下为该方法的源代码
def prompt_user_passwd(self, host, realm):
"""Override this in a GUI environment!"""
import getpass
try:
user = raw_input("Enter username for %s at %s: " % (realm,host))
passwd = getpass.getpass("Enter password for %s in %s at %s: " %(user, realm, host))
return user, passwd
except KeyboardInterrupt:
print
return None, None
发表评论
-
禁用JavaWeb应用中URL上包含的jsessionid
2014-03-21 13:02 1588Java Web 应用似乎总有这样的情况,有事没事总是要在 ... -
java操作保存图片到oracle数据库及获取图片到页面显示
2014-03-21 13:00 1372《--------保存图片到数 ... -
jsp页面通过java调用oracle blob字段显示图片
2014-03-21 12:58 1082转载自:http://blog.csdn.net/javad ... -
正则表达式中在多个匹配的内容中间加字符
2014-03-04 21:35 897selectedText = selectedText.rep ... -
ServletFileUpload parseRequest异常处理
2013-07-16 17:31 1713今天在linux服务器上发布程序后,上传图片处理异常,详情如 ... -
log4j时区设置
2013-03-21 17:23 32742013年3月19日更新程序后,服务器上的码表一直加载不上, ... -
JDBC连接报ORA-12505,sid无法找到
2013-02-06 11:10 3609转载自:http://www.calcprofit.com/ ... -
Javascript网页打印大全
2012-10-11 09:21 1290转载自:http://www.cnblogs.com/gaku ... -
Servlet编程之用Servlet显示图片
2012-09-04 21:38 1233转载自:http://developer.51cto.com/ ... -
tomcat JNDI 连接池
2012-08-02 10:59 1006一.在tomcat_home/common/lib下放入 ... -
JTextArea->JTextPane 解决文字对齐方式的问题
2012-04-09 15:08 4208转载自:http://www.blogjava.net/cer ... -
jquery下json数组的操作用法实例
2011-08-13 10:51 3208转载自:http://blog.csdn.ne ... -
能盖住Select的Div
2011-07-15 23:16 950<html> <head> ... -
jQuery.extend 函数详解
2011-07-11 10:12 927转载自:http://www.cnblogs.com/Ra ... -
利用js获取服务器时间的两个简单方法
2011-07-08 14:57 1603有时用js来获取服务器时间。一般会用System.DateTi ... -
jQuery获取表单项目以及AJAX应用
2011-07-07 09:28 1142转载自:http://www.tsingfeng.com/?p ... -
velocity date.format
2011-06-27 19:39 4106Today's date is: $dateT ... -
Java中修改derby.log文件的路径
2011-04-29 15:26 2143项目中用到derby嵌入式数据库。可是其log文件derby. ... -
socket, nio socket 及nio socket框架MINA总结
2011-04-07 16:55 1193来源:http://blog.csdn.net/lcllc ... -
PreparedStatement 数据大小超出此类型的最大值
2011-03-04 11:17 1943转载自:http://heath-derek.iteye.co ...
相关推荐
Python的urllib3和requests库是进行HTTP请求的两个常用工具,它们在Web开发、数据抓取、API交互等场景中扮演着重要角色。这里我们将深入探讨这两个库的特点、使用方法以及它们之间的区别。 首先,urllib3是Python的...
Python的urllib3库是Python标准库urllib的第三方扩展,提供了一套强大的HTTP客户端功能。这个库在处理网络请求时,特别是在并发请求和管理连接池方面,具有很高的效率和灵活性。下面我们将深入探讨urllib3的核心概念...
python urllib 使用PPT python urllib使用PPT
Python的urllib模块是Python标准库中的一个重要组成部分,它为开发者提供了访问互联网资源的工具。urllib模块包含了多个子模块,如urlopen、urlretrieve、urlparse等,它们各自承担着不同的网络请求任务。在Python 3...
在这个特定的场景中,我们看到标题提到的是"pythonurllib模块下载图片共9页.pdf.z",这暗示了一个使用`urllib`下载图片的教程或指南,可能是一个PDF文档,共9页,被压缩为了一个`.zip`文件。虽然无法直接提供压缩...
### Python urllib2 模块详解 #### 一、引言 `urllib2` 是 Python 早期用于处理 URL 请求的标准库之一,在 Python 2.x 版本中广泛使用。随着 Python 3.x 的普及,该模块已被整合进 `urllib` 包中,并有所调整。...
### Python urllib2 模块详解 #### 一、引言 `urllib2` 是 Python 2.x 版本中的一个重要模块,用于处理 URL 请求。它不仅提供了简单易用的接口,还支持处理复杂的网络请求场景,比如基本的认证、Cookies 和代理...
### Python urllib 库详解 #### 一、引言 `urllib` 是 Python 的一个标准库,主要用于处理 URL 操作,比如抓取网页内容、解析 URL 和处理异常情况等。对于从事 Web 开发或者需要从互联网上抓取数据的开发者来说,`...
使用Python 3.x版本运行py文件时报错 No module named 'urllib3' 一开始参照网上的安装方法通过pip来安装,未成功pip install urllib3 后面找到了这个文件,分享给大家。 使用方法是下载解压后,cmd里切换到解压...
### Python的urllib2库详解及实例 #### 引言 `urllib2`是Python标准库中的一个强大工具,用于处理URLs的获取和解析。尽管在Python 3中已被`urllib.request`和`urllib.parse`等模块取代,但在Python 2中,`urllib2`...
Python的urllib2模块是用于处理URL的工具集,它为开发者提供了强大的功能,包括打开网页、处理HTTP请求和响应、处理HTTP头、处理cookies、处理认证等。在这个实例简介中,我们将深入探讨urllib2模块的核心功能和使用...
urllib3 is a python lib 1.线程安全 2.连接池 3.客户端SSL/TLS验证 4.文件分部编码上传 5.协助处理重复请求和HTTP重定位 6.支持压缩编码 7.支持HTTP和SOCKS代理
资源分类:Python库 所属语言:Python 资源全名:urllib3-1.25.9.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
利用urllib库进行网页的请求
Python的urllib2库是进行HTTP请求的重要工具,主要用于网络数据的抓取和交互。它提供了urlopen函数和Request类,使得开发者能够方便地发送GET和POST请求,并处理各种网络交互中的复杂情况。 1. `urlopen`函数是...