您的位置:首页 > 编程语言 > Python开发

python学习web篇

2015-09-08 13:57 615 查看

目录

目录
Python 的 Web 应用简单的 Web 客户端
统一资源定位符

urlparse 和 urllib 模块
urlparse 模块

urllib 模块

小结

高级的 Web 客户端

网络爬虫蜘蛛机器人

CGI帮助 Web 服务器处理客户端数据

创建 CGI 应用程序

在 CGI 中使用 Unicode

高级 CGI

创建 Web 服务器

相关模块

Python 的 Web 应用:简单的 Web 客户端

[code]Web 客户端和服务器端交互使用的“语言”,Web 交互的标准协议是 HTTP(超文本传输协议)。HTTP协议是 TCP/IP 协议的上层协议,这意味着 HTTP 协议依靠 TCP/IP 协议来进行低层的交流工作。它的职责不是路由或者传递消息(TCP/IP 协议处理这些),而是通过发送、接受 HTTP 消息来处理客户端的请求。


统一资源定位符

URL 使用这种格式:

prot_sch://net_loc/path;params?query#frag





net_loc 字符串如下:

user:passwd@host:port




urlparse 和 urllib 模块

urlparse 模块

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

1、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() 后的输出:

[code]>>>urlparse.urlparse('http://www.python.org/doc/FAQ.html')
('http', 'www.python.org', '/doc/FAQ.html', '', '', '')


2、urlparse.urlunparse()

urlunparse()的功能与 urlpase()完全相反—它拼合一个 6-元组(prot_sch, net_loc, path,

params, query, frag)- urltup,它可能是一个 URL 经 urlparse()后的输出返回值。

urlunparse(urlparse(urlstr)) = urlstr

语法:

urlunparse(urltup)

3、urlparse.urljoin()

在需要多个相关的 URL 时我们就需要使用 urljoin()的功能了

语法:

urljoin(baseurl, newurl, allowFrag=None)

[code]
>>> urlparse.urljoin('http://www.python.org/doc/FAQ.html', \
... 'current/lib/lib.htm')
'http://www.python.org/doc/current/lib/lib.html'


urllib 模块

核心模块:urllib

urllib 模块提供了所有你需要的功能,除非你计划写一个更加低层的网络客户端。urllib 提供了了一个高级的 Web 交流库,支持 Web 协议,HTTP, FTP 和 Gopher 协议,同时也支持对本地文件的访问。urllib 模块的特殊功能是利用上述协议下载数据(从因特网、局域网、主机上下载)。使用这个模块可以避免使用 httplib, ftplib 和 gopherlib 这些模块,除非你想用更低层的功能。在那些情况下这些模块都是可选择的(注意:大多数以*lib 命名的模块用于客户端相关协议开发。并不是所有情况都是这样的,或许 urllib 应该被命名为“internetlib”或者其他什么相似的名字)。

功能:

功能包括 urlopen(), urlretrieve(),quote(),unquote(), quote_plus(),unquote_plus(), 和urlencode() 。

1、urllib.urlopen()

*作用:*urlopen() 打开一个给定 URL 字符串与 Web 连接,并返回了文件类的对象。

语法:

[code]urlopen(urlstr, postQueryData=None)


详细解析:

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


对于所有的 HTTP 请求,常见的请求类型是“GET”。在这些情况中,向 Web 服务器发送的请求字符串(编码键值或引用,如 urlencode()函数的字符串输出[如下])应该是 urlstr 的一部分


对于所有的 HTTP 请求,常见的请求类型是“GET”。在这些情况中,向 Web 服务器发送的请求字符串(编码键值或引用,如 urlencode()函数的字符串输出[如下])应该是 urlstr 的一部分

结果:

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


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

f.readline(), f.readlines(), f.close(),和 f.fileno().




2、urllib.urlretrieve()

作用:如果你对整个 URL 文档的工作感兴趣,urlretrieve()可以帮你快速的处理一些繁重的工作。

语法:

[code]urlretrieve(urlstr, localfile=None, downloadStatusHook=None)


详细解析:

除了像 urlopen()这样从 URL 中读取内容,urlretrieve()可以方便地将 urlstr 定位到的整个HTML 文件下载到你本地的硬盘上。你可以将下载后的数据存成一个本地文件或者一个临时文件。如果该文件已经被复制到本地或者已经是一个本地文件,后续的下载动作将不会发生。


downloadStatusHook 这个函数将会在每块数据下载或传输完成后被调用。调用时使

用下边三个参数:目前读入的块数,块的字节数和文件的总字节数。如果你正在用文本的或图表的

视图向用户演示“下载状态”信息,这个函数将会是非常有用的。


urlretrieve()返回一个 2-元组,(filename, mime_hdrs).filename 是包含下载数据的本地文件名,mime_hdrs 是对 Web 服务器响应后返回的一系列 MIME 文件头。

3、urllib.quote() and urllib.quote_plus()

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

语法:

[code]quote(urldata, safe='/')


详细解析:

逗号,下划线,句号,斜线和字母数字这类符号是不需要转化。其他的则均需要转换。另外,

那些不被允许的字符前边会被加上百分号(%)同时转换成 16 进制,例如:“%xx”,

“xx”代表这个字母的 ASCII 码的十六进制值。当调用 quote*()时,urldata 字符串被转换成了一个可在 URL 字符串中使用的等价值。safe 字符串可以包含一系列的不能被转换的字符。默认的是斜线(/).


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

[code]>>> 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'


4、urllib.unquote() 和 urllib.unquote_plus()

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

语法:

[code]unquote*(urldata)


详细解析:

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

5、urllib.urlencode()

作用:函数接收字典的键-值对,并将其编译成 CGI 请求的 URL 字符串的一部分。键值对的格式是“键=值”,以连接符(&)划分。更进一步,键和它们的值被传到

quote_plus()函数中进行适当的编码。

详细解析:

[code]>>> aDict = { 'name': 'Georgina Garcia', 'hmdir': '~ggarcia' }
>>> urllib.urlencode(aDict)
'name=Georgina+Garcia&hmdir=%7eggarcia'


小结



高级的 Web 客户端

网络爬虫/蜘蛛/机器人

CGI:帮助 Web 服务器处理客户端数据

服务器接到表单反馈,与外部应用程序交互,收到并返回新生成的 HTML 页面都发生在一个叫做 Web 服务器 CGI(Common Gateway Interface)的接口上.

创建 CGI 应用程序

在 CGI 中使用 Unicode

高级 CGI

创建 Web 服务器

相关模块

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: