Python学习笔记【三】Pyhton的HTML应用
Python中和来对URL进行解析的的模块是urlparse.
1.URL解析(Urlparse)
import urlparse
urlstr="https://www.baidu.com/helloword?id=123"
x =urlpars
import urlparse
urlstr="http://www.abc.com/helloword/index.php?id=123"
x =urlparse.urlparse(urlstr)
print "scheme:",x.scheme
print "netloc:",x.netloc
print "path:",x.path
print "params:",x.par
import urlparse
urlstr="http://www.abc.com/helloword/index.php?id=123"
x =urlparse.urlparse(urlstr)
print "scheme:",x.scheme
print "netloc:",x.netloc
print "path:",x.path
print "params:",x.params
print "query:",x.query
print "hostname:",x.hostname
print "port:",x.port
输出结果:
scheme: http
netloc: www.abc.com
path: /helloword/index.php
params:
query: id=123
hostname: www.abc.com
port: None
属性 |
含义 |
scheme |
协议 |
netloc |
服务器地址 |
path |
路径 |
params |
参数 |
query |
查询部分 |
username |
用户名 |
password |
密码 |
hostname |
主机名 |
port |
端口 |
2.URL拼合(urljoin)
import urlparse
print urlparse.urljoin("http://www.abc.com","1.htm")
输出结果:
http://www.abc.com/1.htm
在相对URL中如果有协议字段,则优先使用相对URL中的协议。否则使用绝对URL中的协议字段。
import urlparse
print urlparse.urljoin("http://www.python.org","ftp://www.python.org")
print urlparse.urljoin("http://www.python.org","www.python.org")
输出结果:
ftp://www.python.org
http://www.python.org/www.python.org
3.URL的编码与解码
方法 |
功能 |
quote |
对URL进行编码 |
quote_plus |
同quote方法,进一步将空格变成“+” |
unquote |
解码 |
unquote_plus |
进一步将+变成空格 |
import urllib
print urllib.quote("/~test/")
print urllib.quote_plus("/~test/public html")
输出结果:
/%7Etest/
%2F%7Etest%2Fpublic+html
4.CGI
公共网关接口(Common Gateway Interface)是外部应用程序和HTTP服务器之间交互的
一个能通用接口标准。CGI本身不是一种语言,也不是一种网络协议,仅仅定义了HTTP服务器
和程序之间的交换信息规范,可以用任何语言书写。
CGI环境信息
#远程IP
import os
remote_addr=os.environ['REMOTE_ADDR']
#获取当前服务器中所有运行的CGI变量
import cgi
cgi.print_environ
用户的输入:
form = cgi.FieldStorage()
for key in form.keys():
print key,"==>",form[key].value
print "<br>"
http://127.0.0.1/py/1.py?value1=123&value2=123456
获取HTML资源
import urllib#打印网页源代码
docu_text = urllib.urlopen("http://www.baidu.com")
print docu_text.fp.read()
import urllib#二进制 每1024字节读取存入test.html
fp = urllib.urlopen("http://www.baidu.com")
op=open("test.html","wb")
n=0
while True:
s = fp.read(1024)
if not s:
break
op.write(s)
n = n + len(s)
fp.close()
op.close()
print "retrieved",n,"bytes from ",fp.url