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模块——
urlparse(urlstr,defProtSch=None,allowFrag=None):将URL字符串拆分成一个6元组,如果在urlstr中没有给定协议或者规划将使用defProtSch,参数allowFrag决定是否允许有URL零部件。
urlunparse(urltup):与urlparse()功能相反。
urljoin(baseurl,newurl,allowFrag=None):将URL的基部件baseurl和新部件newurl拼合成一个完整的URL。
urllib模块——
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模块——
urllib2可以处理更复杂URL的打开问题,如登录认证等。
网络爬虫——
web编程的一个常见应用便是网络爬虫,这些程序基于不同的目的而在因特网上搜索和下载页面,例如,为搜索引擎建索引、脱机浏览、下载并保存历史记录或框架、web页面缓存等等。
cgi——
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类。