python学习web篇

本文介绍了Python在Web开发中的应用,包括简单的Web客户端、URL处理、urllib模块的使用,如urlopen、urlretrieve等。还涉及了网络爬虫、CGI和Web服务器的创建,是Python Web入门的全面指南。
摘要由CSDN通过智能技术生成

目录

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

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

>>>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)


>>> 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 连接,并返回了文件类的对象。
语法:

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()可以帮你快速的处理一些繁重的工作。
语法:

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*()函数的功能。
语法:

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'

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

unquote*(urldata)

详细解析:

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

5、urllib.urlencode()
作用:函数接收字典的键-值对,并将其编译成 CGI 请求的 URL 字符串的一部分。键值对的格式是“键=值”,以连接符(&)划分。更进一步,键和它们的值被传到
quote_plus()函数中进行适当的编码。
详细解析:

>>> 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 服务器

相关模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值