Python web编程

urlparse模块:

urlpasrse 模块提供了操作URL 字符串的基本功能。这些功能包括urlparse()、urlunparse()、urljoin()。

  • prot_sch:网络协议或者下载规划

  • net_loc:服务器位置(也可能有用户信息)

  • path:斜线(/)限定文件或者CGI应用程序的路径

  • Params:可选参数

  • query:连接符(&)链接键值对

  • frag:拆分文档中的特殊锚                  


urlparse():

将URL字符串拆分成如上所描述的一些主要部件。语法结构如下:

urlparse(urlstr, defProtSch=None, allowFrag=None)

urlparse()将urlstr解析成6元素类元组(prot_sch, net_loc,path, params, query,frag)。

如果urlstr 中没有提供默认的网络协议或下载规划时可以使用defProtSch。allowFrag 标识一个URL 是否允许使用零部件。

下边是一个给定URL经urlparse()后的输出:

urlparse.urlparse('http://www.python.org/doc/FAQ.html')

返回结果:ParseResult(scheme='http', netloc='www.python.org', path='/doc/FAQ.html', params='', query='', fragment='')


urlunparse():

urlunparse()的功能与urlpase()完全相反,它拼合一个6元素元组(prot_sch, net_loc, path,params, query, frag),它可能是一个URL经urlparse()后的输出返回值。于是,我们可以用如下方式表示:

urlparse.urlunparse(urltup),返回一个url字符串

urltup = urlparse.urlparse('http://www.python.org/doc/FAQ.html')
urlparse.urlunparse(urltup)


返回结果:http://www.python.org/doc/FAQ.html


urljoin():

在需要多个相关的URL 时我们就需要使用urljoin()的功能了,如,在一个Web 页中生成的一系列页面的URL。语法是:

urlparse.urljoin(baseurl, newurl, allowFrag=None)


urllib模块:

Urllib模块提供了在给定的URL地址下载数据的功能,同时也可以通过字符串的编码、解码来确保它们是有效URL字符串的一部分。我们接下来要谈的功能包括urlopen()、urlretrieve()、quote()、unquote()、quote_plus()、unquote_plus()、urlencode()


urllib.urlopen():

urlopen() 打开一个给定URL 字符串与Web 连接,并返回了文件类的对象。语法结构如下:

GET方式参数直接写在urlstr上:

>>>urllib.urlopen('http://192.168.4.37:8000/getExten?num=1')

POST方式:

>>>arg = urllib.urlencode({'num':1})

>>>urllib.urlopen('http://192.168.4.37:8000/getExten', arg)

urlopen()打开urlstr所指向的URL。如果没有给定协议或者下载规划,或者文件规划早已传入,urlopen()则会打开一个本地的文件。

一旦连接成功,urlopen() 将会返回一个文件类型对象,就像在目标路径下打开了一个可读文件。

例如,如果我们的文件对象是f,那么我们的“句柄”将会支持可读方法如:f.read(),f.readline(), f.readlines(), f.close(),和f.fileno().

  • f.read([bytes]):从f中读出所有或者bytes个字节

  • f.readline():从f中读出一行

  • f.readlines():从f中读出所有行并返回一个列表

  • f.close():关闭f的URL链接

  • f.fileno():返回f的文件句柄

  • f.info():获得f的MIME文件头

  • f.geturl():返回f所打开的真正的URL


urllib.urlretrieve():

如果你对整个URL 文档的工作感兴趣,urlretrieve()可以帮你快速的处理一些繁重的工作。除了像urlopen()这样从URL中读取内容,urlretrieve()可以方便地将urlstr定位到的整个HTML文件下载到你本地的硬盘上。你可以将下载后的数据存成一个本地文件或者一个临时文件。如果该文件已经被复制到本地或者已经是一个本地文件,后续的下载动作将不会发生。下边是urlretrieve()的语法:

urlretrieve(urlstr, localfile=None, downloadStatusHook=None)

downloadStatusHook 这个函数将会在每块数据下载或传输完成后被调用。调用时使用下边三个参数:目前读入的块数,块的字节数和文件的总字节数。如果你正在用文本的或图表的视图向用户演示“下载状态”信息,这个函数将会是非常有用的。

urlretrieve()返回一个2-元组,(filename, mime_hdrs).filename 是包含下载数据的本地文件名,mime_hdrs 是对Web 服务器响应后返回的一系列MIME 文件头。要获得更多的信息,可以看mimetools 的Message 类。对本地文件来说mime_hdrs 是空的。


urllib.quote()和urllib.quote_plus():

quote*()函数获取URL 数据,并将其编码,从而适用于URL 字符串中。尤其是一些不能被打印的或者不被Web 服务器作为有效URL 接收的特殊字符串必须被转换。这就是quote*()函数的功能。quote*()函数的语法如下:

urllib.quote(urldata, safe='/')

逗号,下划线,句号,斜线和字母数字这类符号是不需要转化。其他的则均需要转换。另外,那些不被允许的字符前边会被加上百分号(%)同时转换成16 进制,例如:“%xx”,“xx”代表这个字母的ASCII 码的十六进制值。当调用quote*()时,urldata 字符串被转换成了一个可在URL 字符串中使用的等价值。safe 字符串可以包含一系列的不能被转换的字符。默认的是斜线(/).

quote_plus() 与quote()很像,另外它还可以将空格编码成+号。

>>> name = 'joe mama'

>>> number = 6

>>> base = 'http://www/~foo/cgi-bin/s.py'

>>> final = '%s?name=%s&num=%d' % (base, name, number)

>>> final

'http://www/~foo/cgi-bin/s.py?name=joe mama&num=6'

>>>

>>> urllib.quote(final)

'http:%3a//www/%7efoo/cgi-bin/s.py%3fname%3djoe%20mama%26num%3d6'

>>>

>>> urllib.quote_plus(final)

'http%3a//www/%7efoo/cgi-bin/s.py%3fname%3djoe+mama%26num%3d6'


urllib.unquote() 和 urllib.unquote_plus():

unquote*()函数与quote*()函数的功能安全相反,它将所有编码为“%xx”式的字母都转换成它们的ASCII码值。Unquote*()的语法如:

urllib.unquote*(urldata)

调用unquote()函数将会把urldata 中所有的URL-编码字母都解码,并返回字符串。Unquote_plus()函数会将加号转换成空格符。


urllib.urlencode():

在1.5.2 版的Python 中,urlopen()函数接收字典的键-值对,并将其编译成CGI 请求的URL 字符串的一部分。键值对的格式是“键=值”,以连接符(&)划分。更进一步,键和它们的值被传到quote_plus()函数中进行适当的编码。下边是urlencode()输出的一个例子:

>>> aDict = { 'name': 'Georgina Garcia', 'hmdir': '~ggarcia' }

>>> urllib.urlencode(aDict)

'name=Georgina+Garcia&hmdir=%7eggarcia'

urllib2模块:

urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口,这是具有利用不同协议获取URLs的能力,他同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他。它们通过handlers和openers的对象提供。

>>>import urllib2 

>>>response = urllib2.urlopen('http://python.org/') 
>>>html = response.read() 

urllib2的很多应用就是那么简单(记住,除了"http:",URL同样可以使用"ftp:","file:"等等来替代)。

HTTP是基于请求和应答机制的--客户端提出请求,服务端提供应答。urllib2用一个Request对象来映射你提出的HTTP请求,在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,通过调用urlopen并传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

>>>import urllib2 

>>>req = urllib2.Request('http://www.voidspace.org.uk') 
>>>response = urllib2.urlopen(req) 
>>>the_page = response.read()

在HTTP请求时,允许你做额外的两件事。首先是你能够发送data表单数据,其次你能够传送额外的关于数据或发送本身的信息("metadata")到服务器,此数据作为HTTP的"headers"来发送。

POST:

>>>import urllib

>>>import urllib2 
>>>url = 'http://www.someserver.com/cgi-bin/register.cgi' 
>>>values = {'name' : 'Michael Foord',  'location' : 'Northampton',  'language' : 'Python' } 
>>>data = urllib.urlencode(values) 
>>>req = urllib2.Request(url, data) 
>>>response = urllib2.urlopen(req) 
>>>the_page = response.read()

GET:

>>> import urllib2
>>> import urllib 
>>> value = {} 
>>> value ['name'] = 'Somebody Here' 
>>> value ['location'] = 'Northampton' 
>>> value ['language'] = 'Python' 
>>> data = urllib.urlencode(value) 
>>> print data 
name=Somebody+Here&language=Python&location=Northampton 
>>> url = 'http://www.example.com/example.cgi' 
>>> full_url = '%s?%s' % (url, data)

>>> response = urllib2.open(full_url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值