python的web相关模块,有两种不同的类型,urlparse和urllib,分别以不同的功能和兼容性来处理URL,前者主要包括urlparse()
、urlunparse()
和urljoin()
,后者可以使用urlopen()
或urlretrive()
创建web客户端。urllib2模块是一个比urllib功能更加高级的模块。
web开发,无疑要用到统一资源定位器URL,URL格式如下:
prot_sch://net_loc/path:params?query#flag
prot_sch:网路协议或者下载规划。
net_loc:服务器位置,或许也有用户信息。
path:斜线/限定文件或者通用网关接口CGI应用程序的路径。
params:可选参数。
query:连接符&连接键值对。
flag:拆分文档中的特殊锚。
其中,net_loc可以进一步拆分成多个部件,如下:
user:passwd@host:port
user:登录名。
passwd:用户的密码。
host:web服务器运行的机器名或地址,是个必须字段。
port:端口号,默认80。
urlparse(urlstr,defProtSch=None,allowFrag=None)
:将URL字符串拆分成一个6元组,如果在urlstr中没有给定协议或者规划将使用defProtSch,参数allowFrag决定是否允许有URL零部件。
urlunparse(urltup)
:与urlparse()功能相反。
urljoin(baseurl,newurl,allowFrag=None)
:将URL的基部件baseurl和新部件newurl拼合成一个完整的URL。
urlopen(urlstr,postQueryData=None)
:打开urlstr所指向的URL,如果没有给定协议或者下载规划,或者文件规划早已传入,urlopen()则会打开一个本地的文件。打开成功时,返回一个文件类型对象,支持的方法包括read([bytes])、readline()、readlines()、close()、fileno()、info()、geturl()等。
urlretrieve(urlstr,localfile=None,downloadStatusHook=None)
:除了像urlopen()一样从URL中读取内容,还可以方便地将urlstr定位到的整个HTML文件下载到本地的硬盘上,可以将下载后的数据存成一个本地文件或者一个临时文件,如果该文件已经被复制到本地或者已经是一个本地文件,后续的下载动作将不会发生,如果可能,downloadStatusHook这个函数将会在每块数据下载或传输完成后被调用。
quote(urldata,safe='/')
:获取URL数据,并将其编码,从而适用URL字符串,尤其是一些不能被打印的或者不被web服务器作为有效URL接收的特殊字符串必须被转换,quote_plus()功能类似,不同的是还可以将空格编码成加+号。
unquote()
、unquote_plus()
:与quote*()功能相反。
urlencode(dict)
:接收字典的键-值对,并将其编译成CGI请求的URL字符串的一部分,不同的键-值对以符号&划分。
urllib2可以处理更复杂URL的打开问题,如登录认证等。
web编程的一个常见应用便是网络爬虫,这些程序基于不同的目的而在因特网上搜索和下载页面,例如,为搜索引擎建索引、脱机浏览、下载并保存历史记录或框架、web页面缓存等等。
CGI,即Common Gateway Interface,通用网关接口,帮助web服务器处理客户端数据,它代表了在一个web服务器和能够处理用户表单、生成并返回动态HTML页的应用程序间的交互。不过由于CGI的局限性,现在许多典型的web应用产品已经不再使用CGI了。
cgi模块可以帮助我们建立CGI应用程序,首先需要安装一个web服务器,将其配置成可以处理python的CGI请求的模式,然后让web服务器访问CGI脚本。如果是一个简单的服务器,可以使用python自带的web服务器,命令如下:
$python -m CGIHTTPServer
如上命令将会在当前机器的当前目录下建立一个端口号为8000的web服务器,然后可以在启动这个服务的目录下建立一个Cgi-bin,将python的CGI脚本放到这个目录中或者是一些HTML文件直接放在启动这个服务的目录下,接着就可以在地址栏中输入这些地址类访问web站点了,如下:
http://localhost:8000/mypython.htm
http://localhost:8000/cgi-bin/pythons.py
建立一个基于HTTP的web服务,一个基本的服务器和一个处理器是必备的,服务器在客户端和服务器端完成必要的HTTP交互,处理器用来处理客户端的请求,并返回适当的文件,如静态的文本或者由CGI生成的动态文件,处理器的复杂性决定了web服务器的复杂程度。python标准库提供了三种不同的处理器,分别在对应的模块可以找到,如下:
BaseHTTPServer模块:提供基本的web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler处理器。
SimpleHTTPServer模块:包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。
CGIHTTPServer模块:包含处理POST请求和执行CGI的CGIHTTPRequestHandler类。
cgi:从标准网关接口获取数据
cgitb:处理CGI返回数据
htmlib:解析HTML文件时用的旧的HTML解析器,HEMLParser类扩展自sgmllib.SGMLParser
HTMLparser:新的非基于SGML的HTML、XHTML解析器
htmlentitydefs:HTML普通实体定义
Cookie:用于HTTP状态管理的服务器端cookie
cookielib:HTTP客户端的cookie处理类
webbrowser:控制器,向浏览器加载web文档
sgmllib:解析简单的SGML文件
robotparser:解析robots.txt文件作URL的可获得性分析
httplib:用来创建HTTP客户端
xmllib:原始的简单XML解析器(已过时,不推荐使用)
xml:包含许多不同XML特点的解析器(包括sax、dom、etree、expat等)
xmlrpclib:通过HTTP提供xml远程过程调用(RPC)客户端
SimpleXMLRPCServer: Python XML-RPC服务器的基本框架
DocXMLRPCServer:自描述XML-RPC服务器的框架
BaseHTTPServer:用来开发web服务器的抽象类
SimpleHTTPServer:处理最简单的HTTP请求(HEAD和GET)
CGIHTTPServer:不但能像SimpleHTTPServer一样处理web文件,还能处理CGI请求(HTTP POST)
wsgire:web服务器和python web应用程序间的标准接口