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